2008-11-12 17 views
3

Existe-t-il un moyen de faire en sorte que la compilation déduise automatiquement le paramètre template?modèles de classe automatique?

template<class T> 
struct TestA 
{ 
    TestA(T v) {} 
}; 
template<class T> 
void TestB(T v) 
{ 
} 
int main() 
{ 
    TestB (5); 
} 

test B fonctionne très bien, mais quand je change à TestA il ne sera pas compilé avec l'erreur « utilisation du modèle de classe nécessite liste d'arguments de modèle »

Répondre

11

Non, il n'y a pas. Les modèles de classe ne sont jamais déduits. Le schéma habituel est d'avoir une fonction libre make_:

template<class T> TestA<T> make_TestA(T v) 
{ 
    return TestA<T>(v); 
} 

Voir std::pair et std::make_pair, par exemple.

En C++ 0x vous pourrez faire

auto someVariable = make_TestA(5); 

pour éviter d'avoir à spécifier le type des variables locales.

0

La lumière du soleil est juste, mais si je peux vous poser une question: est-ce vraiment un problème dans votre code. Je veux dire:

TestA(5); 

deviendrait

TestA<int>(5); 

Tant qu'il n'y a qu'un seul argument modèle, il est pas si mal, à mon humble avis. Ce n'est pas comme si vous pouviez contourner le type une fois dans la plupart des cas.

+0

En fait, c'est vraiment un problème, oui. Dans le code générique, vous ne pouvez souvent pas épeler le type facilement. – MSalters