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

Проблема с СФИНАЭ
Почему этот код (значение fnc в классе M) не разрешается правилами SFINAE? Я получаю сообщение об ошибке: Error 1 error C2039: 'type' : is not a member of 'std::tr1::enable_if<_Test,_Type>'...
861 просмотров
schedule 28.01.2024

псевдонимы шаблонов и sfinae
В случае сбоя подстановки, связанного с псевдонимом шаблона ( например, псевдонимом шаблона для отсутствующего имени типа члена, как показано во фрагменте кода ниже), должна ли возникать ошибка? Clang и gcc, похоже, не согласны с этим: // some...
1308 просмотров
schedule 22.10.2023

Шаблонный конструктор по умолчанию
Я хотел бы, чтобы определение конструктора по умолчанию переключалось во время компиляции с помощью параметра шаблона. Я могу заставить это скомпилировать OK для конструктора преобразования, но пытаюсь использовать этот метод для конструктора по...
430 просмотров
schedule 04.05.2024

Использование std::enable_if для возвращаемого типа функции шаблона для использования SFINAE — ошибка компиляции
Следующий код #include <type_traits> struct CByteArray {}; struct HLVariant { HLVariant() {} HLVariant(const HLVariant&) {} HLVariant(const CByteArray&) {} }; template <typename T> inline typename...
719 просмотров
schedule 23.11.2023

Вывод аргументов шаблона и SFINAE — с использованием std::enable_if
Я играю со способами фильтрации типов, передаваемых в перегруженные шаблоны функций. Я использую Visual Studio 2013. Вопрос из трех частей: Почему мой компилятор не может вывести Blorg3 ? Является ли причина, по которой TFoo2(argc)...
555 просмотров

Ошибка вывода шаблона
Я пытаюсь реализовать функцию привязки из библиотеки boost. Ниже вы можете увидеть основную структуру bind_t с определенным operator() . Мой вопрос заключается в следующем: почему мы должны указывать в decltype возвращаемый тип operator() ,...
116 просмотров
schedule 02.03.2024

Функциональные эквиваленты C++ STL для метапрограммирования
Существуют ли constexpr или другие эквиваленты времени компиляции для функциональных возможностей STL и других библиотек для использования с метапрограммированием? В частности, я пытаюсь написать несколько метапрограмм, которые используют SFINAE для...
148 просмотров
schedule 14.10.2022

Неявное приведение класса-оболочки к суперклассу в шаблонном вызове
При разработке DSL (который компилируется в C++) я счел удобным определить класс-оболочку, который после уничтожения вызывал бы метод .free() в содержащемся классе: template<class T> class freeOnDestroy : public T { using T::T;...
109 просмотров
schedule 20.12.2023

Как разрешить неоднозначность в перегруженных функциях с помощью SFINAE
У меня есть невероятно интересная библиотека, которая умеет переводить точки: она должна работать с любыми типами точек. template<class T> auto translate_point(T &p, int x, int y) -> decltype(p.x, p.y, void()) { p.x += x; p.y...
1810 просмотров
schedule 30.12.2023

реализация функции-члена в зависимости от параметра шаблона
У меня есть следующая проблема: template< typename T, size_t N, size_t... N_i > class A { public: // ... // first implementation template< size_t M = sizeof...(N_i)+1, typename std::enable_if< M!=1, size_t >::type...
330 просмотров

Как использовать SFINAE с нулевой функцией-членом?
У меня есть шаблон класса Bird с логическим параметром шаблона can_fly . В зависимости от этого значения я хочу включить функцию-член с сигнатурой void fly(); . Это мой код: #include <type_traits> template<bool can_fly> class...
101 просмотров
schedule 14.11.2022

SFINAE внутри аргумента std::enable_if
У меня есть разные типы view , каждый из которых имеет константу-член std::size_t View::dimension и тип члена typename View::value_type . Следующая проверка типа компиляции должна проверить, являются ли From и To представлениями (проверено...
446 просмотров
schedule 19.11.2022

Шаблоны условных псевдонимов
В таком типе, как неспециализированная структура шаблона pointer_traits (т. е. template <class Ptr> struct pointer_traits ), существует шаблон псевдонима-члена rebind , который определяется как Ptr::rebind<U> , если он существует, или...
1619 просмотров

Есть ли способ (на С++) создать класс шаблона, реализующий определенные функции?
Я хочу создать класс, который принимает только определенные типы классов шаблонов. Я знаю, что существует специализация шаблонов, но я хочу, чтобы мой класс принимал все шаблоны, реализующие определенную функцию, поиск. Скажем, у меня есть class...
98 просмотров

Сочетание void_t и enable_if?
В C++17 , void_t можно легко делать SFINAE с class / struct шаблонами: template <class T, class = void> struct test { static constexpr auto text = "general case"; }; template <class T> struct test<T,...
1488 просмотров

ошибка компиляции для SFINAE на VS2017
#include <type_traits> #define str_cat(first, second) first##second #define has_xxx(member_name) \ template<class T, class U = void> \ struct str_cat(has_, member_name): std::false_type {};\ template<class T>\ struct str_cat(has_,...
127 просмотров

Условное переопределение в шаблоне производного класса
У меня есть класс Container , содержащий объекты, тип которых может быть получен из любой комбинации некоторых базовых классов ( TypeA , TypeB и т. д.). Базовый класс Container имеет виртуальные методы, которые возвращают указатель на...
816 просмотров
schedule 30.05.2024

Полное отключение конструктора с помощью `std::enable_if`
У меня есть тип шаблона, который параметризован определенным типом указателя. (как итератор). Я хочу, чтобы этот тип можно было неявно преобразовать в свою версию с квалификатором const (например, thing<const int*>(const...
453 просмотров
schedule 19.11.2022

Оператор перегрузки шаблона в производном классе
Учитывая базовый класс и производный класс, которые оба предоставляют условно разрешенные операторы для определенных типов параметров с использованием SFINAE: #include <type_traits> class Base { public: template<class T,...
210 просмотров

Как изменение аргумента шаблона с типа на не-тип заставляет SFINAE работать?
Из статьи cppreference.com на std::enable_if , Примечания Распространенной ошибкой является объявление двух шаблонов функций, которые отличаются только аргументами шаблона по умолчанию. Это недопустимо, поскольку аргументы шаблона по...
760 просмотров