Bonjour
Dans le logiciel que je développe, j'utilise des std::map<KeyType, ValueType> avec des ValueType différents pour le même KeyType.
Je souhaiterais écrire une fonction template capable de me chercher un itérateur pour une clef donnée quel que soit ValueType.
Déclaration:
Implémentation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 template<class T> typename std::map<KeyType, T>::const_iterator findMatch(std::map<KeyType, T>, KeyType);
Appel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 template<class T> typename std::map<KeyType, T>::const_iterator findMatch(std::map<KeyType, T> i_map, KeyType i_key) { return i_map.find(i_key); }
Le compilateur est d'accord, mais le linker me jette :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 std::map<KeyType, Truc*> map; KeyType key; /*...*/ std::map<KeyType, Truc*>::const_iterator it = findMatchStrict(map, key);
Si je garde la déclaration telle quel et que j'implémente en spécialisant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part error LNK2019: symbole externe non résolu [...]
Ca compile et ça link, mais c'est pas ce que je veux...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 std::map<KeyType, Truc*>::const_iterator findMatch(std::map<KeyType, Truc*> i_map, KeyType i_key) { return i_map.find(i_key); }
Partager