функции-структуры?
просто читаю как делает микрософт для того же type_trait, а он пишет типо
template<class T> INLINE_VAR constexpr bool is_const = false;
template<class T> INLINE_VAR constexpr bool is_const<const T> = true;
А вот гцц реализует тоже самое через структуры вида
template<class T> struct is_const : bool_constant<false> {};
template<class T> struct is_const<const T> : bool_constant<true> {};
Вопрос в чём - какой смысл использовать структуры в таком кейсе, как у гцц? Это всё из-за совместимости со старыми стандартами и невозможности использовать шаблонные переменные?
Структура гибче. И в некотором смысле более в духе компилятора с++, как машины над типами. true_type сравнить можно двумя способами - это и ==true и is_same<true_type, ..>. Также на базе структур можно делать конструкции вида has_some_traits<°°>, а с переменными такое не катит. И у мс-стд наследования от integral_constant тоже очень много. Не только переменные. Думаю используют то то, то другое исходя из целесообразности.
Для совместимости с библиотекой у них ясен фиг будут все эти integral_constant. Но внутри всё сильно по другому
Мсвц таким образом хочет уменьшить количество инстанцирований, чтобы при запросе константы не инстанцировался тип. Но подход это вообще говоря неверный, тк если посмотреть со стороны всему программы, то теперь кто то попросит тип и внутри константу, а кто то только константу и в сумме инстанцирований станет больше
Обсуждают сегодня