IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Comment faire un template de template


Sujet :

Langage C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut Comment faire un template de template
    Bonjour,
    Je découvre les templates et j'ai un petit soucis avec une classe template.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    template<typename T=double>
    class CRankEx
    {
    public:
    	CRankEx();
    	~CRankEx(){};
     
    protected:
    	typedef std::pair<_string, LPARAM> ItemPair;
    	typedef std::pair< template<T> ,ItemPair > MMapPair;
    	typedef std::multimap< template<T> , ItemPair> _mmap;
    	_mmap::const_iterator m_It;
    	_mmap m_mmap;
    .....
     
    };
    La declaration de la multimap ne passe pas !
    Pouvez-vous m'aider?
    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef std::pair< T ,ItemPair > MMapPair;
    typedef std::multimap< T , ItemPair> _mmap;

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut
    Merci, mais hélas j'avais déjà essayé cette syntaxe sans succès.
    J'ai les erreurs suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Warning	1	warning C4346: 'std::multimap<T,CRankEx<T>::ItemPair>::const_iterator' : dependent name is not a type	utilities.h	172	Phoenix
    Error	2	error C2146: syntax error : missing ';' before identifier 'm_It'	utilities.h	172	Phoenix
    Error	3	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int	utilities.h	172	Phoenix
    la ligne 172 étant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	_mmap::const_iterator m_It;

  4. #4
    Membre confirmé

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Points : 527
    Points
    527
    Par défaut
    typename _mmap::const_iterator m_It;

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Pour le pourquoi du typename, cf ici:
    http://cpp.developpez.com/faq/cpp/in...LATES_typename

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut
    Super merci une vrai mine d'or.
    mais... je rame encore. J'essaye de passer du code VS2008 vers gcc et cela accroche au niveau d'une fonction template.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    class Bidon 
    {
    ....
    	template<typename T>
    	bool GetIDstrAs(UINT index, T &val)
    	{
    		if (index>1) 
    		{
    			ASSERT (0);
    			return false;
    		}
    		bool bRet = false;
    		index?bRet=from_string(_string(GetIDstr2()),val):bRet=from_string(_string(GetIDstr()),val);
    		return bRet;
    	};
    ....
    }
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // Convert a string to a specified type
    template<typename T>
    bool from_string( _string & Str, T & Value )
    {
        // Build an input string with given string
    #ifdef UNICODE
    	std::wistringstream iss( Str );
    #else
    	std::istringstream iss( Str );
    #endif
    	// Try to make conversion 
    	return (( iss >> Value ) != 0);
    }
    j'obtiens une erreur du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Multiple markers at this line
    	- no matching function for call to 'from_string(std::basic_string<char, 
    	 std::char_traits<char>, std::allocator<char> >, double&)'
    	- no matching function for call to 'from_string(std::basic_string<char, 
    	 std::char_traits<char>, std::allocator<char> >, int&)'
    je dois certainement utiliser typename devant la fonction from_string mais je ne trouve pas la syntaxe correcte
    Pouvez-vous m'aider?
    Merci

  7. #7
    Membre confirmé
    Avatar de gb_68
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 232
    Points : 547
    Points
    547
    Par défaut
    Bonjour, dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index?bRet=from_string(_string(GetIDstr2()),val):bRet=from_string(_string(GetIDstr()),val);
    tu construis des objets temporaires de type _string. Ces objets ne peuvent pas être passés par référence "simple" (sinon ils pourraient être modifiés, mais étant temporaires, ils seront irrécupérables par la suite - à la sortie de la fonction - ce qui aurait peu de sens). Le compilateur cherche donc une fonction ayant dans sa signature un passage par valeur
    from_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double&)
    Mais comme ta fonction ne modifie pas la chaine de caractère tu peux la passer en référence constante, et les objets temporaires seront acceptés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool from_string( const _string & Str, T & Value )

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Points : 155
    Points
    155
    Par défaut

    Super Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Joomla!] [Joomla 3.x] Comment faire pour rendre un template Right-To-Left par défaut?
    Par crazy_inf dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 29/11/2014, 22h13
  2. Comment faire ma propre classe/template vecteur
    Par touftouf57 dans le forum Visual C++
    Réponses: 2
    Dernier message: 11/11/2010, 13h43
  3. Réponses: 5
    Dernier message: 31/10/2008, 13h24
  4. Une boucle en template, comment faire?
    Par iflypunk dans le forum Général Python
    Réponses: 7
    Dernier message: 24/01/2008, 19h28
  5. [debutant]Comment faire un espace entre 2 apply-templates?
    Par Jayceblaster dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 25/04/2006, 20h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo