Hallo!C++ - Single-Template-Spezialisierung mit mehreren Template-Parametern
Ich möchte nur eine von zwei Vorlagentypen spezialisieren. Z.B. template <typename A, typename B> class X
sollte eine spezielle Implementierung für eine einzelne Funktion haben X<float, sometype>::someFunc()
.
Beispielcode:
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 nicht für class B
. Stimmt es, dass dies in C++ nicht möglich ist? Was wäre die beste Problemumgehung?
[Bearbeiten]
template <float, typename I> void B<float, I>::someFunc();
führt zu main.h: 26: Fehler: 'schweben' ist kein gültiger Typ für einen konstanten Template-Parameter
template <typename I> void B<float, I>::someFunc();
zu main.h führt: 27: Fehler: ungültige Verwendung des unvollständigen Typs 'Klasse B'
Und ich benutze gcc.
[Bearbeiten]
Ich will nicht die ganze Klasse spezialisieren, da es andere Funktionen, die nicht über eine Spezialisierung haben.
Ist die Klassenvorlage A mit Ihrer Frage verknüpft? – Doug
Ich dachte, es würde die Frage leichter verständlich machen. Ich werde es entfernen. – tauran
Dies wurde hunderte Male auf stackoverflow gefragt :) Ich denke, einige von uns könnten eine echte Vorlage FAQ mit solchen Fragen einrichten. Die Leute können die FAQ überprüfen, um zu sehen, ob ihre Frage beantwortet wird, anstatt nach einem Betrogenen suchen zu müssen. –