Вопросы с тегом 'typetraits'

Типовые черты - синтаксические расширения, которые позволяют разработчику во время компиляции определять различные характеристики типа. Поддержка С++ обеспечивается комбинацией поддержки компилятора и набором шаблонов библиотек. Доступ к свойствам типа обеспечивается через заголовок
5

Как работает `is_base_of`?

Как работает следующий код? typedef char (&yes)[1]; typedef char (&no)[2]; template <typename B, typename D> struct Host { operator B*() const; operator D*(); }; template <typename B, typename D> struct is_base_of { templ...
26 мая '10 в 7:43
1

Почему std:: is_pod устарел в С++ 20?

std::is_pod, вероятно, будет устаревшим в С++ 20. Какая причина этого выбора? Что я должен использовать вместо std::is_pod, чтобы узнать, действительно ли тип POD?
12 янв. '18 в 11:46
2

тривиальный или стандартный макет против POD

В условиях неспециалиста, какая разница между тривиальными типами, стандартными типами макета и POD? В частности, я хочу определить, отличается ли new T от new T() для любого параметра шаблона T. Какую из характеристик типа is_trivial, is_standard_...
27 июн. '11 в 17:25
4

В чем разница между чертой и политикой?

У меня есть класс, поведение которого я пытаюсь настроить. template<int ModeT, bool IsAsync, bool IsReentrant> ServerTraits; Затем позже у меня есть свой серверный объект: template<typename TraitsT> class Server {...}; Мой вопрос в ...
05 февр. '13 в 22:16
1

Как работает реализация функции std:: is_function Эрика Ниблера?

На прошлой неделе Eric Niebler твиттер очень компактная реализация для std::is_function класс признаков: #include <type_traits> template<int I> struct priority_tag : priority_tag<I - 1> {}; template<> struct priority_tag<...
18 апр. '17 в 11:20
5

Почему нет черты std:: is_struct?

Я видел, что для проверки того, является ли тип T классом, который я могу использовать: bool isClass = std::is_class<T>::value; Он возвращает true для обоих классов и структур. Я знаю, что в С++ они почти одно и то же, но я хотел бы знать, ...
22 сент. '15 в 14:40
4

Как переключать/выбирать типы во время компиляции?

Есть ли стандартный способ для меня выбрать тип время компиляции для индекса unsigned в С++ 11? Например, что-то вроде: using type_0 = static_switch<0,T,U>; // yields type T using type_1 = static_switch<1,T,U>; // yields type U Ес...
14 мар. '13 в 8:11
2

С С++ 17 можно определить, имеет ли структура/класс какую-либо базу?

Мне нужна черта типа, которая будет истинна, если данный тип получен из чего-либо, а false в противном случае. Например: template<class T> struct is_inherit //... logic of inheritance detection ; template<class T> void AppLogic...
13 сент. '17 в 10:45
2

Когда лямбда тривиальна?

Когда лямбда гарантирована быть тривиальной, если когда-либо? Я предположил, что если он захватывает только тривиальные типы или ничего, это было бы тривиально. У меня нет никакого стандарта, чтобы поддержать это, хотя. Моя мотивация заключалась в ...
07 окт. '15 в 7:27
7

Узнайте, может ли объект C++ вызываться

Можно ли написать черту типа, скажем, is_callable<T> которая сообщает, определен ли объект operator()? Легко, если аргументы оператора вызова известны заранее, но не в общем случае. Я хочу, чтобы признак возвращал true, если и только если опре...
13 мар. '13 в 18:50
2

Что такое decltype с двумя аргументами?

Изменить, чтобы избежать путаницы: decltype не принимает два аргумента. См. Ответы. Следующие две структуры могут использоваться для проверки существования функции-члена в типе T во время компиляции: // Non-templated helper struct: struct _te...
16 апр. '13 в 18:31
1

Disambiguate перегруженный указатель функции участника передается как параметр шаблона

Я пытаюсь воссоздать шаблон Наблюдателя, где я могу идеально перенаправить параметры на заданную функцию-член наблюдателей. Если я попытаюсь передать адрес функции-члена, у которой несколько переопределений, он не может вывести правильную функ...
26 июл. '13 в 6:35
5

Что делают компиляторы с разветвлением во время компиляции?

EDIT: В качестве примера я использовал случай if if else, который иногда может быть разрешен во время компиляции (например, когда задействованы статические значения, cf <type_traits>). Адаптация ответов ниже для других типов статического вет...
31 мая '14 в 13:19
2

Как определить, является ли метод виртуальным?

Я попытался создать черты, чтобы определить, является ли метод virtual: (https://ideone.com/9pfaCZ) // Several structs which should fail depending if T::f is virtual or not. template <typename T> struct Dvf : T { void f() final; }; template &l...
07 апр. '14 в 11:28
6

Использование свойств типа С++ 11 для обеспечения альтернативных встроенных реализаций

Является ли следующий шаблон кода разумным при использовании признаков в шаблоном коде, где обе альтернативные реализации всегда компилируются? Чтение кода кажется более ясным, чем использование других shenanigans для условной компиляции (но тогда, ...
04 нояб. '16 в 6:00