Информация об изменениях

Сообщение Re: Предпочтительный способ вычислений во времени компиляции от 13.09.2019 6:50

Изменено 13.09.2019 6:52 rg45

Re: Предпочтительный способ вычислений во времени компиляции
Здравствуйте, sergii.p, Вы писали:

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

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

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

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)> {};
Re: Предпочтительный способ вычислений во времени компиляции
Здравствуйте, sergii.p, Вы писали:

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

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

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

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<5>::value << std::endl;
}