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

SFINAE Для обнаружения существования функции, не являющейся членом
Кто-нибудь знает метод специализации шаблона в зависимости от того, определен ли метод, не являющийся членом? Я знаю, что существует множество способов специализации, если функция-член существует, но я никогда не видел примера, не являющегося членом....
1351 просмотров
schedule 11.07.2023

Ошибки при использовании decltype() и SFINAE
В ответ на ... какой-то другой вопрос где-то я написал этот код. struct no_type{}; template<typename T> struct has_apply { static decltype(T().apply<0u>(double())) func( T* ptr ); static no_type func( ... ); static const...
1455 просмотров
schedule 24.06.2022

Ошибка замены не является ошибкой (SFINAE) для перечисления
Есть ли способ использовать сбой замены не является ошибкой (SFINAE) для перечисления? template <typename T> struct Traits { } template <> struct Traits<A> { }; template <> struct Traits<B> { enum { iOption =...
1302 просмотров
schedule 11.03.2023

Может ли SFINAE обнаруживать нарушения приватного доступа?
Интересно, если я проверю для какого-то члена класса, а член является частным, что ответит sfinae? Будет ли это ошибкой, или она скажет, что все в порядке, или она будет ошибкой в ​​​​пути sfinae?
1012 просмотров
schedule 31.08.2023

Как работает этот шаблон класса has_member?
Я пытаюсь понять, как работает следующий шаблон класса (взято из здесь ), но я не мог понять это правильно: template <typename Type> class has_member { class yes { char m;}; class no { yes m[2];}; struct BaseMixin {...
1692 просмотров
schedule 18.01.2024

SFINAE: компилятор не выбирает специализированный класс шаблона
У меня проблема SFINAE : В следующем коде я хочу, чтобы компилятор C++ выбрал специализированный функтор и напечатал «специальный», но вместо этого напечатал «общий». #include <iostream> #include <vector> template<class T,...
1099 просмотров
schedule 15.03.2022

Что случилось с моими членами класса условного шаблона SFINAE redux:?
Я новичок в написании кода метапрограммирования шаблона (а не просто в его чтении). Так что я столкнулся с некоторыми проблемами нубов. Один из них довольно хорошо резюмирован в сообщении, не относящемся к SO, под названием " Что случилось с моим...
2543 просмотров

Указание разрешенных аргументов в шаблонах
Могу ли я точно указать, какие аргументы может принимать шаблон? Например, я хотел бы создать шаблон, который может быть создан только с классами, которые являются или расширяют класс A . В Java дженерики поддерживают это с помощью: class...
1207 просмотров
schedule 17.01.2023

SFINAE - Обнаружить конструктор с одним аргументом
Кто-нибудь знает, как обнаружить конструктор с одним аргументом? Например, эта структура должна иметь отрицательный результат: struct MyStruct { MyStruct( int x, int x2 ) : y( x ) {} int y; }; У меня есть хорошая проверка SFINAE, чтобы...
1511 просмотров
schedule 31.10.2022

Проверить наличие глобального оператора‹‹ в C++
Здравствуйте, я хочу написать две реализации функции-члена to_string следующим образом: template <typename T0> class foo { public: std::string to_string(); public: T0 m_Value; }; template <typename T0> std::string...
705 просмотров
schedule 11.02.2022

различное поведение активатора в разных контекстах в шаблонах классов
Почему поведение такое разное? Версия #if 1 успешно (что странно) компилируется и выдает ожидаемый результат в stdout , но версия с #if 0 этого не делает: #include <iostream> #include <type_traits> #include <cstdlib>...
116 просмотров
schedule 26.04.2024

Перегрузка C++ 11 std::enable_if в Visual C++ 2013
Следующий фрагмент кода был взят из folly и проверяет, больше, чем другой во время компиляции. #include <limits> #include <type_traits> template <typename RHS, RHS rhs, typename LHS> bool greater_than_impl( typename...
952 просмотров
schedule 21.02.2022

Тип совпадения унаследованных функций-членов
У меня есть следующий фрагмент кода, который не компилируется. #include <iostream> struct A { void foo() {} }; struct B : public A { using A::foo; }; template<typename U, U> struct helper{}; int main() { helper<void...
754 просмотров
schedule 29.04.2022

Обнаружение наследования того же класса с помощью SFINAE
Я пытаюсь написать метафункцию, которая проверяет, все ли типы, переданные в качестве вариативного параметра шаблона, различны. Кажется, что наиболее эффективный способ сделать это — наследовать от набора классов и определить, есть ли ошибка....
606 просмотров

Как условно скомпилировать элемент на основе шаблона класса
Я хотел бы условно скомпилировать член класса на основе его параметра шаблона класса. У меня есть удобные функции, которые имеют смысл для компилятора только в определенных условиях, поэтому я бы хотел, чтобы компилятор пропустил их, если я могу...
73 просмотров
schedule 12.09.2022

Является ли C ++ enable_if для ленивых легальным?
Я часто использую технику, которую я называю « enable_if ленивого», где я использую decltype и оператор запятой, чтобы включить функцию, основанную на некотором вводе шаблона. Вот небольшой пример: template <typename F> auto...
4098 просмотров
schedule 31.07.2023

Неожиданный сбой SFINAE с использованием std :: result_of
В C ++ 14 предполагается, что std :: result_of приведет к SFINAE, если выражение имеет неправильный формат *. Вместо этого я получаю ошибку компиляции («недопустимые операнды для двоичного выражения») в моем последнем случае ниже (т.е. позволяя...
296 просмотров
schedule 08.08.2023

Использует ли условный аргумент boost::enable_if_c‹› короткое замыкание?
Видите is >> i внизу моего кода? Я хочу, чтобы g++ (C++03; у меня есть причины) использовал первый шаблон operator>>() — тот, который печатает «неконтейнерный тип», потому что правое выражение — это int , а не, например, vector ....
144 просмотров

анти-SFINAE, разрешающий перегрузку, если данное выражение *не* правильно сформировано
SFINAE легко использовать, чтобы скрыть перегрузку определенной функции, если конкретное выражение имеет неправильный формат. Но я хочу сделать обратное, скрыв перегрузку тогда и только тогда, когда заданное выражение является правильным, и сделать...
442 просмотров
schedule 12.04.2023

Специализация std::hash для производных классов работает в gcc, а не в clang
Я пытаюсь специализировать std::hash для производных классов. Пока лучший подход основан на этом ответе : #include <type_traits> #include <functional> #include <unordered_set> namespace foo { template<class T, class...
864 просмотров
schedule 26.10.2023