Вопросы с тегом «sfinae»

499
Шаблонная проверка на существование функции-члена класса?

Можно ли написать шаблон, который меняет поведение в зависимости от того, определена ли определенная функция-член в классе? Вот простой пример того, что я хотел бы написать: template<class T> std::string optionalToString(T* obj) { if (FUNCTION_EXISTS(T->toString)) return...

263
Как я могу добавить отражение в приложение C ++?

Я хотел бы иметь возможность проанализировать класс C ++ на предмет его имени, содержимого (т.е. членов и их типов) и т. Д. Я говорю здесь на родном C ++, а не на управляемом C ++, в котором есть отражение. Я понимаю, что C ++ предоставляет некоторую ограниченную информацию, используя RTTI. Какие...

165
Почему я должен избегать std :: enable_if в сигнатурах функций

Скотт Мейерс опубликовал содержание и статус своей следующей книги EC ++ 11. Он написал, что один пункт в книге может быть «Избегайте std::enable_ifподписей функций» . std::enable_if может использоваться в качестве аргумента функции, в качестве возвращаемого типа или в качестве шаблона класса или...

149
Как работает `void_t`

Я смотрел выступление Уолтера Брауна на Cppcon14 о современном программировании шаблонов ( часть I , часть II ), где он представил свою void_tтехнику SFINAE. Пример: дан простой шаблон переменной, который оценивает, правильно voidли сформированы все аргументы шаблона: template< class ... >...

135
Проверьте, имеет ли класс функцию-член заданной подписи

Я прошу уловку с шаблоном, чтобы определить, есть ли у класса конкретная функция-член данной подписи. Проблема похожа на проблему, указанную здесь http://www.gotw.ca/gotw/071.htm, но не то же самое: в пункте книги Саттера он ответил на вопрос, что класс C ДОЛЖЕН ПРЕДОСТАВЛЯТЬ функцию-член с...

123
Примеры C ++ SFINAE?

Я хочу больше углубиться в метапрограммирование шаблонов. Я знаю, что SFINAE означает «отказ замены не является ошибкой». Но может ли кто-нибудь показать мне хорошее применение...

82
Как реализована функция std :: is_function?

Как следующая реализация для std::is_function? template<class T> struct is_function : std::integral_constant< bool, !std::is_const<const T>::value && !std::is_reference<T>::value > {}; (от ссылки CPP ) Мне кажется, intфункция an будет под этим определением. Что мне...

40
Подходы к функции SFINAE в C ++

Я активно использую функцию SFINAE в проекте и не уверен, есть ли какие-либо различия между следующими двумя подходами (кроме стиля): #include <cstdlib> #include <type_traits> #include <iostream> template <class T, class = std::enable_if_t<std::is_same_v<T,...