[template]Résolution implicite d'un type template
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:
Code:
1 2 3
| template<class T>
typename std::map<KeyType, T>::const_iterator
findMatch(std::map<KeyType, T>, KeyType); |
Implémentation:
Code:
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);
} |
Appel :
Code:
1 2 3 4
| std::map<KeyType, Truc*> map;
KeyType key;
/*...*/
std::map<KeyType, Truc*>::const_iterator it = findMatchStrict(map, key); |
Le compilateur est d'accord, mais le linker me jette :
Code:
error LNK2019: symbole externe non résolu [...]
Si je garde la déclaration telle quel et que j'implémente en spécialisant :
Code:
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);
} |
Ca compile et ça link, mais c'est pas ce que je veux... :cry: