Вопросы по теме 'template-meta-programming'
c ++ Typelist производного класса
Используя CRTP (любопытно повторяющийся шаблон шаблона), вы можете предоставить базовому классу сведения о классах, производных от него. Не так сложно создать массив, в котором хранится экземпляр каждого класса, производного от базового класса (см....
1417 просмотров
schedule
25.09.2021
Найдите индекс элемента на карте слияния
Я борюсь с небольшой функциональностью, которую я ищу.
У меня есть класс, содержащий fusion::map . Я хотел бы использовать конструктор с переменным числом аргументов для инициализации элементов на этой карте.
Я ожидаю, что самый простой способ...
884 просмотров
schedule
17.11.2021
заполнять статические массивы шаблонов метапрограммированием и вариативными шаблонами
Я знаю, что есть более простые способы сделать это, но я хотел бы инициализировать во время компиляции карту из развернутого индекса 2-го массива в его общий формат.
Я хотел бы сделать это без необходимости создавать экземпляр объекта массива....
1640 просмотров
schedule
15.10.2021
Выберите функцию с помощью метапрограммирования
Предположим, что следующие две функции могут предоставляться или не предоставляться пользователем:
void foo(int) { std::cout << "foo int" << std::endl; }
void foo() { std::cout << "foo void" << std::endl; }
В моей...
172 просмотров
schedule
15.10.2021
Извлечь параметры класса шаблона по умолчанию
Есть ли способ извлечь параметры по умолчанию для шаблонного класса, зная только неспециализированный шаблонный класс во время компиляции?
Я знаю, как извлечь параметры экземпляра класса шаблона, например:
// Just an example class for the...
423 просмотров
schedule
06.09.2021
Проверка наличия функции (не метода) в c ++ 11 с помощью шаблонов
Таким образом, с помощью SFINAE и c ++ 11 можно реализовать две разные функции шаблона в зависимости от того, можно ли заменить один из параметров шаблона.
Например
struct Boo{
void saySomething(){ cout << "Boo!" << endl; }
};...
4494 просмотров
schedule
20.10.2021
Как метапрограммировать извлечение общего списка для создания вызова функции
У меня есть семейство классов с методами со следующей сигнатурой:
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 просмотров
schedule
27.10.2021
Передача вариативных параметров в уже шаблонно-вариационной функции
Название плохое, но лучше я придумать не мог. Не стесняйтесь менять это.
Вот шаблонный класс многомерного массива, над которым я сейчас работаю. Я пытаюсь максимально его оптимизировать:
#include <array>
template <typename T,...
108 просмотров
schedule
11.10.2021
Почему 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 просмотров
schedule
01.11.2021
Компилятор параметров шаблона С ++ не может вывести
вот функция для регистрации.
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 просмотров
schedule
04.11.2021
Получить значение варианта, который сам может быть другим вариантом
У меня есть вариант ScalarVar
using ScalarVar = std::variant<int, std::string>;
И вариант Var , который сам может быть ScalarVar или std::vector из ScalarVar s
using Var = std::variant<ScalarVar,...
255 просмотров
schedule
15.10.2021
Ошибка компиляции при попытке удалить смежные дубликаты из списка типов шаблона
Результат, которого я пытаюсь достичь:
removeduplicates<TMPArray<8, 8, 9, 9, 10, 11, 11>>::type приводит к тому же типу, что и TMPArray<8, 9, 10, 11>
Пока мое решение выглядит так:
template<int... I>
struct TMPArray...
38 просмотров
schedule
01.10.2021
Получить тип для индекса в кортеже во время выполнения
Я знаю, есть несколько тем, в которых спрашивают очень близкие вещи, но в моем случае это не работает.
Я хотел бы построить шаблонную фабрику с доступом к индексу во время выполнения. Поэтому у меня есть несколько типов с одним и тем же базовым...
1342 просмотров
schedule
01.03.2022
Примеры метапрограммирования шаблонов через constexpr?
Есть ли примеры, в которых метапрограммирование шаблонов было бы лучше использовать, чем новый constexpr? Насколько я понял, и constexpr, и метапрограммирование шаблонов имеют схожие цели, но метапрограммирование шаблонов не устарело. Поэтому должно...
3180 просмотров
schedule
10.03.2022
Создание имени типа С++ путем объединения параметра шаблона со строкой
Я пытаюсь найти способ использовать Boost::MPL для создания имени типа, которое представляет собой конкатенацию параметра шаблона и строки.
У меня есть пары классов с именами: X и XProvider . Последний является фабричным классом, который...
2571 просмотров
schedule
15.03.2022
Превращение #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 просмотров
schedule
28.03.2022
Синтаксический сахар: автоматическое создание простых функциональных объектов
Я должен реализовать набор шаблонов классов и две специальные переменные, _1 и _2 .
Они должны сделать следующий правовой кодекс:
// Sort ascending
std::sort(a, a+5, _1 > _2);
// Output to a stream
std::for_each(a, a+5, std::cout...
199 просмотров
schedule
03.04.2022
Реализация A (:, k) = b; Matlab-подобный синтаксис в матричной библиотеке C ++
Я разработал собственный матричный класс C ++ на основе шаблонов выражений. Я перегрузил оператор () , чтобы я мог читать или записывать матрицы элементов, например,
cout << A(i,j) << endl;
а также
A(i,j)=b;...
256 просмотров
schedule
05.04.2022