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

Ошибка замены не является ошибкой. Это метод программирования на C ++, который позволяет шаблонам проверять свойства параметров своих шаблонов, тем самым позволяя использовать различные специализации, если доступны определенные типы объектов.
3
ответа

Специализация частичного шаблона с помощью enable_if: выполнить стандартную реализацию

Использование C ++ 11 enable_if Я хочу определить несколько специализированных реализаций для функции (на основе типа параметра, скажем), а также реализацию по умолчанию. Каков правильный способ его определения? Следующий пример не работае...
задан 16.06.2017 в 11:19
1
ответ

Почему void_t не работает в SFINAE, но enable_if делает

Я пытался понять, как работает SFINAE , и я экспериментировал с этим кодом #include <type_traits> struct One { using x = int; }; struct Two { using y = int; }; template <typename T, std::void_t<typename T::x>* = nul...
задан 30.06.2017 в 13:57
3
ответа

выражение declval (для SFINAE) с помощью std :: ostream

Я пытаюсь создать класс черт типа, чтобы определить, можно ли передавать конкретный тип T через оператор << std::ostream . Я использую простую технику SFINAE. В конечном счете, выражение, которое я пытаюсь оценить для ошибки замены:...
задан 27.05.2016 в 12:13
2
ответа

Частичная специализация метода в шаблоном классе

Дано: struct A { virtual bool what() = 0; }; template<typename T, typename Q> struct B : public A { virtual bool what(); }; Я хочу частично специализировать what вроде: template<typename T, typename Q> bool B<...
задан 23.04.2012 в 18:31
2
ответа

Почему эллипсис предпочитает вариационный шаблон при вызове без аргументов?

Я использую следующий шаблон SFINAE для оценки предиката в списке вариационного типа: #include <type_traits> void f(int = 0); // for example template<typename... T, typename = decltype(f(std::declval<T>()...))> std::t...
задан 22.05.2014 в 12:31
2
ответа

перегрузка шаблона, а SFINAE работает только с функциями, но не с классами

может кто-нибудь объяснить, почему компилятор принимает только этот код template<typename L, size_t offset, typename enable_if< (offset<sizeof(L)), int >::type =0> void a_function(){} template<typename L, size_t offset, typ...
задан 31.01.2012 в 13:46
1
ответ

Путаница с жесткой ошибкой в ​​SFINAE

Что касается следующего кода ( Ссылка , воспроизведенного ниже для удобства) #include <type_traits> #include <utility> namespace foo_name { template <typename T> void foo(); template <> void foo<int>(); templat...
задан 09.08.2017 в 09:48
4
ответа

Проверка SFINAE для оператора + =

Я пытаюсь исключить перегрузку из набора перегрузки, если отсутствует operator+= . Я знаю, как проверить, является ли T+T законным: template<typename T, typename CheckTplusT = decltype(std::declval<T>() + std::declva...
задан 01.10.2014 в 12:16
2
ответа

Есть ли способ вывести тип одного элемента массива в c ++

У меня возникла проблема с выводом типа одного элемента массива c ++. Я хотел бы сделать что-то вроде: template <class T> struct array_element { }; template <class T> struct array_element<T[]> { using type = T; }; in...
задан 24.05.2016 в 13:09
3
ответа

Возврат SFINAE, если оператор разделения не реализован

Я хочу написать функцию, которая выполняет разделение между двумя аргументами a и b другого типа, используя выражение a/b , если оператор разделения определен или возвращается в a * (1/b) , если есть не является таким оператором. Эт...
задан 22.12.2015 в 16:21