Supposons que j’ai déclaré:
template void foo(T& t);
Maintenant, quelle est la différence entre
template void foo(int& t);
et
template void foo(int& t);
sémantiquement? Et est-ce que template-with-no-crochets et template-with-empty-crochets ont d’autres sémantiques dans d’autres contextes?
Lié à: Comment forcer une instance particulière d’un modèle C ++ à être instanciée?
template <> void foo
déclare une spécialisation du modèle, avec un corps potentiellement différent.
template void foo
provoque une instanciation explicite du modèle, mais n’introduit pas de spécialisation. Il force simplement l’instanciation du modèle pour un type spécifique.
Avec class / struct,
template struct foo {};
Voici une spécialisation:
template <> struct foo{};
Voici une instanciation explicite:
template struct foo;