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

c ++ Typelist производного класса
Используя CRTP (любопытно повторяющийся шаблон шаблона), вы можете предоставить базовому классу сведения о классах, производных от него. Не так сложно создать массив, в котором хранится экземпляр каждого класса, производного от базового класса (см....
1417 просмотров

Найдите индекс элемента на карте слияния
Я борюсь с небольшой функциональностью, которую я ищу. У меня есть класс, содержащий fusion::map . Я хотел бы использовать конструктор с переменным числом аргументов для инициализации элементов на этой карте. Я ожидаю, что самый простой способ...
884 просмотров

заполнять статические массивы шаблонов метапрограммированием и вариативными шаблонами
Я знаю, что есть более простые способы сделать это, но я хотел бы инициализировать во время компиляции карту из развернутого индекса 2-го массива в его общий формат. Я хотел бы сделать это без необходимости создавать экземпляр объекта массива....
1640 просмотров

Выберите функцию с помощью метапрограммирования
Предположим, что следующие две функции могут предоставляться или не предоставляться пользователем: void foo(int) { std::cout << "foo int" << std::endl; } void foo() { std::cout << "foo void" << std::endl; } В моей...
172 просмотров

Извлечь параметры класса шаблона по умолчанию
Есть ли способ извлечь параметры по умолчанию для шаблонного класса, зная только неспециализированный шаблонный класс во время компиляции? Я знаю, как извлечь параметры экземпляра класса шаблона, например: // Just an example class for the...
423 просмотров

Проверка наличия функции (не метода) в c ++ 11 с помощью шаблонов
Таким образом, с помощью SFINAE и c ++ 11 можно реализовать две разные функции шаблона в зависимости от того, можно ли заменить один из параметров шаблона. Например struct Boo{ void saySomething(){ cout << "Boo!" << endl; } };...
4494 просмотров

Как метапрограммировать извлечение общего списка для создания вызова функции
У меня есть семейство классов с методами со следующей сигнатурой: double compute(list<T> pars) Этот метод выполняет расчет с параметрами, полученными через pars . Для каждого compute(list) метода у меня есть другой compute(x1, x2,...
200 просмотров
schedule 19.09.2021

Любопытно взаимно повторяющиеся определения классов
Я хочу, чтобы объявления типов в двух классах взаимно зависели друг от друга. Вот первый пример, который компилируется с помощью clang и gcc: template <class Sum> struct A { using X = char; // (1) using Z = typename...
585 просмотров

Передача вариативных параметров в уже шаблонно-вариационной функции
Название плохое, но лучше я придумать не мог. Не стесняйтесь менять это. Вот шаблонный класс многомерного массива, над которым я сейчас работаю. Я пытаюсь максимально его оптимизировать: #include <array> template <typename T,...
108 просмотров

Почему GCC допускает выводимый тип возвращаемого значения в этом шаблоне функции, а MSVC и Clang - нет?
Пример кода: class A { static constexpr auto GetInt() noexcept { return 6; } template<int N> std::enable_if_t< N >= GetInt(), int> func() { return N; } }; https://godbolt.org/z/-0pwIQ И Clang, и MSVC заявляют,...
92 просмотров

Компилятор параметров шаблона С ++ не может вывести
вот функция для регистрации. template <typename ReqT, typename RespT> bool RegisterCmdHandler(int cmd_id, std::function<int(int, const ReqT&, RespT&)> sync_handler) { // ... do something with sync_handler and register it...
50 просмотров

Получить значение варианта, который сам может быть другим вариантом
У меня есть вариант ScalarVar using ScalarVar = std::variant<int, std::string>; И вариант Var , который сам может быть ScalarVar или std::vector из ScalarVar s using Var = std::variant<ScalarVar,...
255 просмотров

Ошибка компиляции при попытке удалить смежные дубликаты из списка типов шаблона
Результат, которого я пытаюсь достичь: removeduplicates<TMPArray<8, 8, 9, 9, 10, 11, 11>>::type приводит к тому же типу, что и TMPArray<8, 9, 10, 11> Пока мое решение выглядит так: template<int... I> struct TMPArray...
38 просмотров

Получить тип для индекса в кортеже во время выполнения
Я знаю, есть несколько тем, в которых спрашивают очень близкие вещи, но в моем случае это не работает. Я хотел бы построить шаблонную фабрику с доступом к индексу во время выполнения. Поэтому у меня есть несколько типов с одним и тем же базовым...
1342 просмотров

Примеры метапрограммирования шаблонов через constexpr?
Есть ли примеры, в которых метапрограммирование шаблонов было бы лучше использовать, чем новый constexpr? Насколько я понял, и constexpr, и метапрограммирование шаблонов имеют схожие цели, но метапрограммирование шаблонов не устарело. Поэтому должно...
3180 просмотров

Создание имени типа С++ путем объединения параметра шаблона со строкой
Я пытаюсь найти способ использовать Boost::MPL для создания имени типа, которое представляет собой конкатенацию параметра шаблона и строки. У меня есть пары классов с именами: X и XProvider . Последний является фабричным классом, который...
2571 просмотров

Превращение #ifdef в метапрограмму шаблона на C++
У меня есть следующий код внутри класса С++: class Features { #define Feature_Size_A 12345 #define Feature_Size_B 45678 #define Feature_Size_C 78901 //#define Feature_Size_D 14725 const int Feature_Sum = 0 #ifdef...
2257 просмотров
schedule 22.03.2022

Можно ли вернуть вариативную лямбду из шаблона функции?
У меня есть следующий фрагмент кода (С++ 11): template <typename F, typename FirstT, typename... FIn> auto min_on(F f, FirstT first, FIn... v) -> typename std::common_type<FirstT, FIn...>::type { using rettype...
1430 просмотров

Синтаксический сахар: автоматическое создание простых функциональных объектов
Я должен реализовать набор шаблонов классов и две специальные переменные, _1 и _2 . Они должны сделать следующий правовой кодекс: // Sort ascending std::sort(a, a+5, _1 > _2); // Output to a stream std::for_each(a, a+5, std::cout...
199 просмотров

Реализация A (:, k) = b; Matlab-подобный синтаксис в матричной библиотеке C ++
Я разработал собственный матричный класс C ++ на основе шаблонов выражений. Я перегрузил оператор () , чтобы я мог читать или записывать матрицы элементов, например, cout << A(i,j) << endl; а также A(i,j)=b;...
256 просмотров