Вопросы по теме 'enable-if'

Как я могу написать шаблон функции для всех типов с определенной чертой типа?
Рассмотрим следующий пример: struct Scanner { template <typename T> T get(); }; template <> string Scanner::get() { return string("string"); } template <> int Scanner::get() { return 10; } int main() {...
826 просмотров
schedule 04.07.2022

enable_if и оператор преобразования?
Есть ли шанс использовать enable_if с оператором преобразования типов? Кажется сложным, поскольку и тип возвращаемого значения, и список параметров неявны.
5217 просмотров

Вывод типа C++0x путается с boost::enable_if
Я пытаюсь написать общую функцию фильтрации, которая выполняет линейную интерполяцию по заданной координате выборки в многомерном массиве (произвольный ранг). Для этого мне нужен шаблон рекурсивной функции, который проходит по всем измерениям...
492 просмотров
schedule 07.06.2023

enable_if в функции шаблона члена шаблона класса
Похоже, это ошибка в MSVC10? #include <type_traits> template<int j> struct A{ template<int i> typename std::enable_if<i==j>::type t(){} }; int main(){ A<1>().t<1>(); //error C2770 }...
983 просмотров

boost:enable_if для определения специального метода в шаблонном классе
Я хотел бы иметь собственный метод - я вызову MyMethod - в шаблонном классе - я вызову Foo - ТОЛЬКО, когда Foo был создан с определенными типами параметров шаблона (например, когда A - int, а B - строка), в противном случае, Я не хочу, чтобы MyMethod...
548 просмотров
schedule 10.11.2022

enable_if в Haskell
Как мне написать что-то вроде следующего в Haskell: showSquare :: (Show a, Num a) => a -> String showSquare x = "The square of " ++ (show x) ++ " is " ++ (show (x * x)) showSquare :: (Show a, not Num a) => a -> String showSquare x =...
215 просмотров
schedule 10.11.2022

Почему enable_if_t в аргументах шаблона жалуется на переопределение?
У меня есть следующий случай, который работает с использованием std::enable_if : template<typename T, typename std::enable_if<std::is_same<int, T>::value>::type* = nullptr> void f() { } template<typename T,...
23649 просмотров
schedule 13.03.2024

Специализированный шаблон класса для любого подкласса X без добавления в шаблон дополнительного аргумента типа
мне нужно специализироваться template< typename T, int Id > struct ValueTraits { // Default version static int getValue() { return 0; } }; для любого подкласса некоторого ConcreteClass как T : class ConcreteClass {}; struct...
120 просмотров

sfinae: условие enable_if
Я всегда вижу, что enable_if используется только с условием std::is_integral::value. Есть ли способ использовать в условии вызов функции функции-члена объекта другого класса шаблонов? Функция, о которой я говорю, должна выглядеть так: bool...
1008 просмотров
schedule 01.07.2022

Как включить переключение наследования в зависимости от типа шаблона
Я хочу реализовать переключатель реализации в зависимости от параметра шаблона, который я передаю классу: Если переданный тип шаблона является производным от определенного класса (здесь: Serializable), то контейнер DataElement, который создает...
408 просмотров

Включить / отключить все входы и флажки с любым отмеченным флажком
У меня есть форма со многими текстовыми полями ввода и флажками. Всякий раз, когда флажок установлен, все поля ввода текста и все другие флажки (кроме того, который был отмечен) должны быть отключены. После снятия этого флажка все отключенные поля...
5937 просмотров

std :: enable_if, основанный на том, что std :: is_convertible неправильно выводит шаблон
У меня такой код: #include <iostream> #include <type_traits> template <typename T, typename std::enable_if <std::is_convertible<int, T>::value, T>::type> void func(T a) { std::cout...
1735 просмотров
schedule 13.02.2023

Резервный вариант SFINAE, когда функция не существует
В настоящее время я пытаюсь реализовать функцию toString , которая вызывает .toString() или std::to_string() в зависимости от того, что доступно для выведенного типа. Пока у меня есть этот рабочий фрагмент: #include <iostream>...
365 просмотров
schedule 17.06.2023

Как именно работает SFINAE?
У меня проблема с SFINAE. Я упускаю что-то важное, и чтение других вопросов не помогает :( Вот код: #include <string> #include <type_traits> #include <iostream> // version with template class template<typename T,...
213 просмотров
schedule 10.08.2022

Могу ли я определить шаблоны для разных наборов типов?
Мне нужно написать шаблонную функцию, которая ведет себя по-разному в зависимости от класса ее параметра: template<class ContainerType> bool myFunc(ContainerType in){ //do some stuff } template<class NotAContainerType> bool...
519 просмотров

Как работает std::enabled_if при включении через параметр
Я пытаюсь понять, как работает enable_if, и я понимаю почти все, кроме сценария № 3 из https://en.cppreference.com/w/cpp/types/enable_if template<class T> void destroy(T* t, typename...
104 просмотров
schedule 22.03.2024

определяемое пользователем преобразование не может использовать static_cast в C++
Я пытаюсь решить некоторые проблемы с Eigen . В процессе я обнаружил, что static_cast и определяемое пользователем преобразование конфликтуют. Возможно, проблема вызвана std::enable_if ? Вот в основном то, что я пробовал: #include...
209 просмотров
schedule 23.06.2022

Каков рекомендуемый способ моделирования концепций и ограничений?
Перед введением концепций и ограничений есть несколько способов смоделировать эту проверку во время компиляции. Возьмем, к примеру, функцию " order() ": (как реализовать LessThanComparable без концепций и ограничений - это отдельная история)...
240 просмотров

Запретить создание экземпляра класса шаблона для типов, не поддерживаемых оператором извлечения строкового потока (››)
Я пытаюсь немного узнать о шаблонах и метафункциях, а именно о std::enable_if . Я делаю систему меню для наших школьных заданий (внеклассных, заметьте), и мне нужен способ получения информации от пользователя. Я хотел бы определить класс шаблона...
87 просмотров
schedule 24.11.2022

Могу ли я перегрузить переменные шаблона?
Я хочу объявить что-то вроде этого: template <typename T> constexpr enable_if_t<is_integral_v<T>, int[]> foo = { 1, 2 }; template <typename T> constexpr enable_if_t<is_floating_point_v<T>, int[]> foo = { 10,...
199 просмотров