Hallo!Spécialisation de template unique C++ avec plusieurs paramètres de template
Je voudrais spécialiser seulement l'un des deux types de modèles. Par exemple. template <typename A, typename B> class X
devrait avoir une implémentation spéciale pour une seule fonction X<float, sometype>::someFunc()
.
Exemple de code:
main.h:
#include <iostream>
template <typename F, typename I>
class B
{
public:
void someFunc()
{
std::cout << "normal" << std::endl;
};
void someFuncNotSpecial()
{
std::cout << "normal" << std::endl;
};
};
template <typename I>
void B<float, I>::someFunc();
main.cpp:
#include <iostream>
#include "main.h"
using namespace std;
template <typename I>
void B<float, I>::someFunc()
{
cout << "special" << endl;
}
int main(int argc, char *argv[])
{
B<int, int> b1;
b1.someFunc();
b1.someFuncNotSpecial();
B<float, int> b2;
b2.someFunc();
b2.someFuncNotSpecial();
}
Compilation échoue pour class B
. Est-il vrai, que ce n'est pas possible en C++ de cette façon? Quelle serait la meilleure solution de contournement?
[modifier]
template <float, typename I> void B<float, I>::someFunc();
conduit à main.h: 26: Erreur: 'float' est pas un type valide pour un paramètre constant modèle
template <typename I> void B<float, I>::someFunc();
conduit à main.h: 27: erreur: utilisation invalide du type incomplet «classe B»
Et j'utilise gcc.
[modifier]
Je ne veux pas se spécialiser toute la classe, car il y a d'autres fonctions qui ne sont pas une spécialisation.
Le modèle de classe A est-il lié à votre question? – Doug
Je pensais que cela rendrait la question plus facile à comprendre. Je vais l'enlever. – tauran
Cela a été demandé des centaines de fois sur stackoverflow :) Je pense que certains d'entre nous pourraient mettre en place un vrai modèle de FAQ avec de telles questions. Les gens peuvent vérifier la faq pour voir si leur question est répondue, au lieu d'avoir à chercher une dupe. –