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 : 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);
Implémentation:
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);
}
Appel :
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);
Le compilateur est d'accord, mais le linker me jette :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
error LNK2019: symbole externe non résolu [...]
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
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...