Скажем, у меня есть следующий кодСколотить специализаций шаблона
#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;
}
Есть ли возможность (то есть ли СТЛ предложение конструкт) сваливать вместе два специализированных случаях calcFac<0>
и calcFac<1>
, так что мне нужно только одну функцию для обоих случаев?
т.е .: calcFac</*if this parameter is 0 or 1 use that template function*/>
Это выглядит хорошо – FloriHe
это странно ввести неиспользуемый параметр, как это, хотя. Что-то вроде этого: https://godbolt.org/g/epF0wQ кажется мне более понятным. Хотя я, вероятно, сделаю это, если структуры не будут работать в первую очередь. Что-то больше похоже: https://godbolt.org/g/PB0Agq – xaxxon
Я не уверен, что «ошибка SFINAE» - правильный термин. Если вы это произнесете, это звучит немного странно: сбой замены не является ошибкой ошибки ... – user463035818