Re: Предпочтительный способ вычислений во времени компиляции
От: rg45 СССР  
Дата: 13.09.19 06:50
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>собственно в C++, есть два способа делать одно и то же.

SP>
SP>Вроде выбор напрашивается. Надо предпочитать constexpr функции. Но если смотреть реализации stl, то получается многие идут по первому пути (н-р реализация наибольшего общего делителя _gcd из std::ratio для gcc и msvc). Значит есть какие-то проблемы с constexpr подходом. Так вот какие?

Ничего не имею против функций, но вариант реализации на шаблонах структур тоже имеет право на жизнь, я считаю. Благо необходимось в шаблонной рекусии отпала во многих случаях, после появления variadic templates и fold expressions:

http://coliru.stacked-crooked.com/a/1f217aa952e79f57

template <size_t N, typename = std::make_index_sequence<N+1>>
struct Factorial;

template <size_t N, size_t...V>
struct Factorial<N, std::index_sequence<0, V...>> : std::integral_constant<size_t, (1 * ... * V)> {};

int main()
{
    std::cout << Factorial<0>::value << std::endl;
    std::cout << Factorial<1>::value << std::endl;
    std::cout << Factorial<2>::value << std::endl;
    std::cout << Factorial<3>::value << std::endl;
    std::cout << Factorial<4>::value << std::endl;
    std::cout << Factorial<5>::value << std::endl;
}
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 13.09.2019 7:33 rg45 . Предыдущая версия . Еще …
Отредактировано 13.09.2019 7:30 rg45 . Предыдущая версия .
Отредактировано 13.09.2019 7:08 rg45 . Предыдущая версия .
Отредактировано 13.09.2019 7:03 rg45 . Предыдущая версия .
Отредактировано 13.09.2019 7:01 rg45 . Предыдущая версия .
Отредактировано 13.09.2019 7:00 rg45 . Предыдущая версия .
Отредактировано 13.09.2019 6:52 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.