Partage
  • Partager sur Facebook
  • Partager sur Twitter

Bonne pratique fonction

    21 janvier 2019 à 11:05:07

    Bonjours ,

    j'ai une petite question en regardent le forum je suis tombée sur la fonction std::tuple.

    que faut t-il meut faire :

    #include <iostream>
    #include <tuple>
    #include <array>
     
    template<class Type ,int Size>
    bool fonctionPointeurReturn(std::array<Type,Size> const &tableauStatistique,Type &moyenne,Type &mediane,Type &ecartType);
    
    template<class Type ,int Size>
    void fonctionPointeurTry(std::array<Type,Size> const &tableauStatistique,Type &moyenne,Type &mediane,Type &ecartType);
    
    template<class Type ,int Size>
    std::tuple<Type,Type,Type> fonctionTuple(std::array<Type,Size> const &tableauStatistique);
    
    int main(){
    	
    	std::array<int,6> tableau({1,2,3,4,5,6});
    	
    	int moyenne,mediane,ecartType;
    	
    	if(fonctionPointeurReturn<int,tableau.size()>(tableau,moyenne,mediane,ecartType)){
    		std::cout <<"error"<<std::endl;
    	}
    	
    	try{
    		fonctionPointeurTry<int,tableau.size()>(tableau,moyenne,mediane,ecartType);
    	}catch (const std::invalid_argument& ia) {
    		std::cerr << "Invalid argument: " << ia.what() << '\n';
    	}
    	
    	try{
    		std::tie(moyenne,mediane,ecartType) = fonctionTuple<int,tableau.size()>(tableau);
    	}catch (const std::invalid_argument& ia) {
    		std::cerr << "Invalid argument: " << ia.what() << '\n';
    	}
    	return 0;
    }
    
    template<class Type ,int Size>
    bool fonctionPointeurReturn(std::array<Type,Size> const &tableauStatistique,Type &moyenne,Type &mediane,Type &ecartType){
    	try{
    		
    	//code ....
    	
    	}catch(...){
    		return true;
    	}
    	return false;
    }
    
    template<class Type ,int Size>
    void fonctionPointeurTry(std::array<Type,Size> const &tableauStatistique,Type &moyenne,Type &mediane,Type &ecartType){
    	try{
    		
    	//code ....
    	
    	}catch(...){
    		throw std::invalid_argument("error ......");
    	}
    }
    
    template<class Type ,int Size>
    std::tuple<Type,Type,Type> fonctionTuple(std::array<Type,Size> const &tableauStatistique){
    	Type moyenne;
    	Type mediane;
    	Type ecartType;
    	
    	try{
    		
    		//code ....
    	
    	}catch(...){
    		throw std::invalid_argument("error ......");
    	}
    	return std::make_tuple(moyenne,mediane,ecartType);
    }

    j'ai l'habitude de parsée par pointeur .

    j'ai une autre question est il possible d'avoir la déclaration et l'initiation sur la même ligne ?

    ex (ne fonctionne pas):

    auto [moyenne,mediane,ecartType] = fonctionTuple<int,tableau.size()>(tableau);



    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2019 à 12:43:01

      Lu'!

      di20 a écrit:

      j'ai une petite question en regardent le forum je suis tombée sur la fonction std::tuple.

      Ce n'est pas une fonction, c'est un type.

      Concernant ton code je ne comprends pas ce que tu essaies de faire. On ne peut pas répondre à une question comme :

      • qu'est ce qu'il vaut mieux faire entre A, B, ... ?

      Sans savoir ce que l'on cherche à résoudre comme problème.

      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        21 janvier 2019 à 13:55:24

        Bonjour,

        Je n'ai pas vu/compris la première question!
        Pour la seconde : on peut avoir la déclaration et l'initialisation sur une ligne à la condition de:
        - être en C++17 ou plus
        - que le return soit dans le bloc try (car en dehors les variables n'existent plus.)

        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

        Bonne pratique fonction

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown