Вопросы по теме 'template-meta-programming'

Как вывести во время компиляции корень дерева наследования, общий для двух типов, если он существует?
У меня есть проблема, когда мне нужно обнаружить общего предка двух типов (с одним или нулевым базовым классом), если он существует. Можно ли построить черту типа для решения этой проблемы? В коде: template<typename T1, typename T2>...
243 просмотров
schedule 25.11.2023

Как выполнять общие вычисления над разнородными пакетами аргументов вариативной шаблонной функции?
ПОМЕЩЕНИЕ: Немного поигравшись с вариативными шаблонами, я понял, что достижение чего-либо, что выходит за рамки тривиальных задач метапрограммирования, вскоре становится довольно громоздким. В частности, я обнаружил, что мне нужен способ...
6859 просмотров

Сопоставление псевдонимов шаблона с параметрами шаблона шаблона
В настоящее время я пишу метафункцию для оценки выражений, что-то вроде boost::mpl::apply: template<typename EXPRESSION , typename... ARGS> using eval = typename eval_impl<EXPRESSION,ARGS...>::result; Как видите, я использую...
163 просмотров

различные реализации класса на основе параметра шаблона
Я полагаю, это тривиально для людей, которые знают шаблоны... Предположим, нам нужны две разные реализации этого класса шаблона, в зависимости от значения N: template <int N> class Foo { ... }; Например: template <int...
1264 просмотров

Опционально опубликуйте методы, основанные на вариативных параметрах шаблона.
Предисловие Представьте, что у меня есть шаблон: template<class... Opts> class rqueue , в котором могут быть различные функции, выбранные с помощью тегов (специальные структуры опций), переданные в список параметров, например....
91 просмотров
schedule 17.03.2024

Компактная и простая инверсия std::tuple
Я новичок в метапрограммировании. Я просмотрел другие похожие вопросы, но ни один из них не делает то, что я действительно хочу. Вот моя попытка инвертировать std::tuple. Основная проблема, с которой я столкнулся, это инвертирование данных во...
588 просмотров
schedule 15.01.2024

Получить тип & для встроенного и оператора & ()?
Правка: ответ, который я отметил ниже, не на 100 % правильный, на самом деле он содержится в комментарии: using TPtr = decltype(&std::declval<T&>()); Я пытаюсь использовать std::conditional<> , чтобы получить тип &T...
54 просмотров

Как проверить, существует ли специализация шаблонной функции
Я управляю преобразованием единиц измерения. Скажите нам, что я достиг состояния, когда я этого достиг. Сердцем моего преобразования между различными единицами измерения является следующая общая функция шаблона: template <class SrcUnit, class...
1453 просмотров

Подстановка шаблона завершается ошибкой, когда я изменяю имя параметра типа - ошибка компилятора?
Большая часть следующего кода была взята из ответа Петра Скотницкого. Я экспериментировал с ним и обнаружил ошибку в MSVC 14.0 Update 3. Рассмотрим следующий код: #include <iostream> template <typename T> struct identity { using...
40 просмотров

Напишите метафункцию, возвращающую тип из списка типов, который имеет typedef данного типа в C++11.
Я столкнулся со сценарием, в котором у меня есть список классов в списке вариативных шаблонов, и, учитывая тип ( Target_ ), я хочу найти класс в списке ( ContainingClass_ ), который typedef s Target_ как ContainingClass_::Class . Вот моя...
342 просмотров

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

Возврат шаблонного типа из контейнера разнородных шаблонных значений
Я помещаю экземпляры шаблонного класса, содержащего разнородные значения шаблона, в контейнер, например std :: vector. При доступе к конкретному элементу из указанного вектора я требую, чтобы возвращался точный шаблонный тип, а не только базовый...
229 просмотров

Функция с двумя переменными параметрами
Я намерен реализовать шаблонную функцию, которая будет принимать две функции и список их параметров, а затем создавать две оболочки. Я уже реализовал аналогичное решение, чтобы принять две функции и создать оболочку, используя std::bind() , но...
93 просмотров

Как написать функцию шаблона с переменным числом аргументов на С++, где пакет параметров не является последним параметром?
Я пытаюсь использовать функцию шаблона с переменным числом аргументов, где пакет параметров не является последним параметром в списке. Обратите внимание, что есть два рекурсивных вызова: один отбрасывает параметр перед пакетом, а другой вызов...
174 просмотров

Сочетание 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 просмотров

Обфускация std::array с помощью constexpr
Я ищу небольшую функцию, которая может преобразовывать std::array , добавляя возрастающие значения. Функция должна быть функцией времени компиляции. Мне удалось написать небольшую функцию constexpr, которая делает это для массива длины 3, но...
408 просмотров

ошибка компиляции для 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 просмотров

Передать шаблон класса в качестве аргумента шаблона
Можно ли передать шаблон класса (например, std::vector , не создавая его экземпляр, например std::vector<int> ) в качестве аргумента шаблона? Я хочу написать тип, который проверяет, является ли данный тип экземпляром данного шаблона. Я знаю,...
73 просмотров
schedule 29.03.2024

Можно ли выводить переменные constexpr во время компиляции для отладки метапрограмм шаблонов?
Я отлаживаю метафункцию, которая выполняет итерацию по вариативному параметру шаблона и проверяет пары ( Type , Tag ), чтобы увидеть, помечен ли каждый Type соответствующим Tag : template<typename Type, typename Tag, typename ... Rest>...
556 просмотров

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