Описание тега sfinae
Ошибка замены не является ошибкой. Это метод программирования на C++, который позволяет шаблонам проверять свойства своих параметров шаблона, что позволяет использовать различные специализации, если доступны определенные виды объектов.
2
ответа
Можно ли обнаружить константность метода класса, используя SFINAE?
Рассмотрим эту структуру: struct foo { void dummy() const {} }; Можно ли обнаружить константность этого метода с помощью SFINAE? Например, я хотел бы захватить это свойство в черту, которая может быть использована в static_assert: static_assert(is_c…
21 дек '12 в 15:30
1
ответ
SFINAE: удалить функцию с тем же прототипом
Интересно, в чем разница между этим кодом, который работает: #include <type_traits> #include <iostream> template<typename T> using is_ref = std::enable_if_t<std::is_reference_v<T>, bool>; template<typename T> usin…
20 май '18 в 23:41
3
ответа
Использование SFINAE с общими лямбдами
Могут ли общие лямбды воспользоваться правилом "Ошибка замещения - это не ошибка"? пример auto gL = [](auto&& func, auto&& param1, auto&&... params) -> enable_if_t< is_integral< std::decay_t<decltype(param1)> &…
06 июл '15 в 19:17
1
ответ
Всегда ли необходимо дублировать параметр шаблона класса при включении конструкторов на его основе?
Вообще при использовании enable_if на основе типа шаблона класса необходимо продублировать тип шаблона класса в качестве параметра шаблона конструктора или метода: template < typename U = T, typename = typename std::enable_if< !std::is_void<…
23 авг '16 в 11:50
1
ответ
Ошибка при замене шаблона, сообщенная компилятором
Я вижу ошибку сборки, которая является правильной, но что-то, что я ожидал бы игнорировать из-за правила "Ошибка замены не является ошибкой": C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\vector(895): error C3699: '&&': cann…
09 авг '17 в 18:43
1
ответ
SFINAE: decltype для оператора []
На основе ответов здесь и здесь я пытаюсь использовать следующее template <typename T> using operator_square_brackets = decltype(&T::operator[]); Это терпит неудачу на визуальной студии с error C2760: syntax error: expected ')' not ']' Люб…
21 июл '17 в 06:54
1
ответ
Почему sfinae перегрузка не решена
Эта версия отлично работает: template<typename T> struct Foo { template<typename U = T> typename std::enable_if<std::is_same<U,A>::value>::type bar() { std::cout << "1" << std::endl; } template<typename U = T&g…
06 июн '18 в 08:47
2
ответа
Определение шаблонных методов с помощью SFINAE
У меня есть простая черта struct hasMemberSerialize что я пытаюсь использовать, чтобы определить, совместим ли какой-либо данный класс с callSerialize(), struct выглядит так: template<typename Type, typename ArchiveType> struct hasMemberSerial…
14 окт '18 в 17:36
2
ответа
SFINAE отправка между недействительным и недействительным методом
У меня есть что-то вроде следующего: template <typename T> struct Base { auto func() { // do stuff auto x = static_cast<T&>(*this).func_impl(); // do stuff return x; } }; struct A : Base<A> { int func_impl() { return 0; } }; st…
19 дек '17 в 15:51
1
ответ
Есть ли способ использовать SFINAE, чтобы определить, не объявлена ли не шаблонная функция, не являющаяся членом?
Я пытаюсь ответить на этот вопрос, используя SFINAE и decltype. Подводя итог, автор должен получить функцию, которая действует по-разному в зависимости от того, объявлена ли другая функция в модуле компиляции (будь то объявлена раньше или позже,…
17 сен '15 в 13:43
2
ответа
Специализация шаблона с аргументом по умолчанию
У меня есть программа, которая заключается в следующем. Есть базовый шаблон struct X и частичная специализация с SFINAE. template <typename T, typename U = void> struct X{ X() { std::cout << "in 1" << std::endl; }; }; template <…
23 июл '18 в 12:38
1
ответ
SFINAE проверка для оператора [] более запутана, чем я?
Я написал простой чек для operator[], но has_subscript_op экземпляр шаблона структуры выбирает неправильную перегрузку: #include <iostream> #include <type_traits> #include <string> #include <map> template<class, class, cla…
23 сен '16 в 14:15
1
ответ
Соответствие функции-члена существования и подписи: параметры
Чтение связанных вопросов "Как вызывать функцию-член, только если объект имеет ее?" и "Можно ли написать шаблон C++ для проверки существования функции?" Я реализую свой собственный класс черт. Цель очень проста, хотя я не могу достичь того, что хоте…
24 дек '14 в 06:32
0
ответов
Документирование перегруженных функций SFINAE с помощью Doxygen
Я пытаюсь документировать следующие перегруженные функции SFINAE (обе) с помощью Doxygen 1.8.11: template <typename T, typename std::enable_if< std::is_integral<T>::value, int >::type = 0> auto func(T x); template <typename T, t…
12 апр '16 в 13:05
1
ответ
MSVC10 SFINAE вызывает фатальную ошибку, а не ошибку замещения
У меня есть (относительно) краткий пример кода здесь. #include <type_traits> template<typename T> class function; template<typename Ret> class function<Ret()> { public: template<typename Func> function(Func f, typename …
15 май '11 в 16:06
2
ответа
"Что случилось с моим SFINAE"?
Я новичок в написании шаблонов метапрограммирования кода (вместо того, чтобы просто читать его). Так что я сталкиваюсь с некоторыми проблемами с нубами. Один из них довольно хорошо описан в посте, не относящемся к SO, который называется "Что случило…
17 июл '12 в 22:58
2
ответа
В MSVC2015 обнаружен неправильный вывод для члена SFINAE
Я узнал о SFINAE и о том, как легко реализовать его с void_t, Но я получаю разные выходные данные для разных компиляторов: //pre c++17 void_t definition: template<class... Ts> struct make_void {typedef void type;}; template<class... Ts> …
16 сен '16 в 16:37
1
ответ
Устранить неоднозначность перегрузки с помощью SFINAE
Я обнаружил похожие случаи, но они обычно заканчивали тем, что я (думаю) делаю здесь. Я хочу иметь возможность вызывать функцию с одним или несколькими параметрами, очевидно, если функция существует с перегрузками с несколькими параметрами, правильн…
09 мар '15 в 09:40
1
ответ
Пакет параметров с совпадением типа предыдущего параметра
Поэтому я использую простой пример, чтобы попытаться понять шаблоны с переменным числом аргументов и некоторые приемы tmp. Пример состоит из класса Timer, у которого есть метод toc(). Методы toc используются для остановки таймера и вызова функции, к…
17 сен '18 в 22:15
1
ответ
Условная компиляция метода-члена void с использованием enable_if
, #include <iostream> #include <type_traits> using namespace std; template<typename T> struct MyClass{ void hello( void) { hello(std::is_same<T,bool>()); } void hello(std::true_type){ cout<<"hello only for bools"<<…
04 янв '17 в 22:03