sagen, ich habe folgenden CodeSammen Vorlage Spezialisierungen
#include <iostream>
template<int N>
int calcFac() {
return N*calcFac<N-1>();
}
template<>
int calcFac<1>() {
return 1;
}
template<>
int calcFac<0>() {
return 1;
}
int main() {
int f4 = calcFac<4>();
int f5 = calcFac<5>();
int f1 = calcFac<1>();
int f0 = calcFac<0>();
std::cout <<"4! = "<<f4<<std::endl;
std::cout <<"5! = "<<f5<<std::endl;
std::cout <<"1! = "<<f1<<std::endl;
std::cout <<"0! = "<<f0<<std::endl;
return 0;
}
Gibt es eine Möglichkeit (dh nicht das STL bietet ein Konstrukt) einen Topf zu werfen, die beiden Spezialfälle calcFac<0>
und calcFac<1>
, so dass ich nur eine Funktion benötigen für beide Fälle?
d.h .: calcFac</*if this parameter is 0 or 1 use that template function*/>
verwenden, das gut aussieht – FloriHe
es ist seltsam einen nicht verwendeten Parameter wie einführen das, obwohl. Etwas wie dieses: https://godbolt.org/g/epF0wQ scheint mir einfacher. Obwohl ich das wahrscheinlich mit Strukturen tun würde, funktioniert das überhaupt nicht. Etwas mehr wie: https://godbolt.org/g/PB0Agq – xaxxon
Ich bin mir nicht sicher, ob "SFINAE Fehler" der richtige Begriff ist. Wenn Sie es buchstabieren, klingt es ein bisschen komisch: Substitutionsfehler ist kein Fehler Fehler ... – user463035818