Ich habe eine Klasse, die ich auf der Grundlage des Werts in der Vorlage verschiedene Aktionen ausführen muss. Aber ich erhalte eine Fehlermeldung „Prototyp passt nicht jeder in der Klasse ...“Auswahl der Elementfunktion mit Enable_if
#include <iostream>
#include <type_traits>
using namespace std;
template<int t>
struct A
{
template<typename EqualTwo>
void test();
};
template<int t>
template<typename std::enable_if<t == 2>::value>
void A<t>::test()
{
cout << "T is equal to two.";
}
template<int t>
template<typename std::enable_if<t != 2>::value>
void A<t>::test()
{
cout << "T is not equal to two.";
}
int main() {
A<5> five;
A<2> two;
cout << five.test() << endl;
cout << two.test() << endl;
return 0;
}
In meinem realen Code, nicht dem Beispiel, ich habe viele andere Mitgliedsvariablen und Funktionen, die spezialisiert werden nicht müssen. Nur diese eine Funktion. Gibt es keine Möglichkeit, zwischen dieser einen Funktion zu wechseln? – JadziaMD
@JadziaMD Siehe meine Bearbeitung. – 101010
@JadziaMD Sie können auch Vererbung verwenden: eine Basisklasse mit gemeinsamem Code und so vielen abgeleiteten, wie Sie benötigen. siehe [Beispiel] (http://coliru.stacked-crooked.com/a/ffc4a858f36cd2b2) basierend auf der primären Antwort – Garf365