Страницы

Поиск по вопросам

четверг, 4 октября 2018 г.

Шаблоны переменных в C++14

Изучая новый стандарт C++, натолкнулся на нововведение «шаблоны переменных»
Синтаксис у шаблона следующий:
template < typename T > constexpr T value = T(1234);
О применении шаблона написано:
Данная возможность позволяет создавать и использовать constexpr шаблоны переменных, для более удобного сочетания с шаблонными алгоритмами.
Не вполне понимаю, как такая переменная будет использоваться в шаблонном алгоритме. Не могли бы Вы привести несколько примеров использования этого механизма? Также не понимаю, почему нельзя такое шаблонное constexpr выражение заменить нешаблонным, ведь значение мы указываем явно, соответственно, и тип можем написать (вывести) явно.


Ответ

В стандарте есть пример
template constexpr T pi = T(3.1415926535897932385L);
template T circular_area(T r) { return pi * r * r; }
Здесь шаблон переменной позволяет получить константу нужного размера - float/double/etc.

Другое популярное применение - это замена is_some::value на is_some_v, например
template< class T, class U > inline constexpr bool is_same_v = is_same::value; // C++17

Комментариев нет:

Отправить комментарий