Возможно ли вывести параметр шаблона непигового типа из параметра функции шаблона?Вычисление параметра шаблона непигового типа
Рассмотрим простой шаблон:
template <int N> constexpr int factorial()
{
return N * factorial<N - 1>();
}
template <> constexpr int factorial<0>()
{
return 1;
}
template <> constexpr int factorial<1>()
{
return 1;
}
Я хотел бы быть в состоянии изменить factorial
так, что я могу альтернативно назвать это так:
factorial(5);
и пусть фигурку компилятор из значения из N во время компиляции. Возможно ли это? Может быть, с некоторым причудливым дополнением C++ 11?
Почему вы хотите это сделать? Функция 'factorial' не принимает никаких параметров.В чем преимущество 'factorial (5)' над правильным 'factorial <5>()'? –
@CodyGray: Я думаю, что идея заключалась бы в создании универсальной «факториальной» функции, способной вычислять результат во время компиляции, если ему дано выражение, известное во время компиляции, но также способное вычислять его во время выполнения, если вход нормальная переменная. –
@Matteo: Насколько я понимаю, во время выполнения ничего не вычисляется, поскольку выражение объявлено 'constexpr'. И вообще, я не понимаю, почему возникла бы проблема с передачей «нормальной переменной» вместо 5 с использованием стандартного синтаксиса. Вопрос здесь в том, «как я могу избежать набора угловых скобок», и я не понимаю мотивацию. –