Описание тега template-meta-programming

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

C++ Boost MPL / Fusion векторов динамического push_back

Я новичок в мире TMP, и мне нужна помощь относительно использования векторов в boost mpl или fusion. Итак, вот ситуация: У меня есть API для асинхронных вызовов функций в многопоточной среде, который реализован как библиотека времени выполнения, нап…
2 ответа

Как можно перечислять, упорядочивать и т. Д. Классы во время компиляции?

Я борюсь с некоторыми правилами того, что может быть использовано в вычислениях времени компиляции. Здесь я написал код, который связывает уникальный идентификатор с каждым классом, который запрашивает его (и выделенное имя для целей тестирования). …
29 дек '15 в 23:40
1 ответ

Использование auto/decltype для вывода типа массива

Чтобы сделать std::pair из строки и связанной функции, мне удалось сделать следующее auto f1 = std::make_pair(std::wstring(L"send_order"),std::bind(&RESTListener::send_order, this, std::placeholders::_1)); auto f2 = std::make_pair(std::wstring(L…
24 мар '16 в 10:40
2 ответа

Как преобразовать этот список типов с разбойником?

У меня есть следующий список типов: using ComponentList = brigand::list<TransformComponent, ObjectComponent, BodyComponent> Как я могу преобразовать предыдущий список в новый список, который будет выглядеть так: using ComponentHandleList = bri…
2 ответа

C++11: функция поиска с постоянным временем для строковых литералов

В C++во время компиляции поиск целых чисел в значениях переменной можно производить следующим образом: template<int> int *map() { static int var = 0; return &var; } int main() { *map<0>() = 42; *map<1>() = 1337; return *map<…
29 мар '14 в 16:18
1 ответ

Каков пример практического использования "рекурсивно вложенного шаблона"?

Я нашел эту специфическую модель, упомянутую в этом вопросе. Каково практическое использование такого шаблона? #include <iostream> using namespace std; template<typename T> struct Recursive { using cycle = struct X : Recursive<X> {…
02 июл '18 в 09:45
1 ответ

Отправка для двоичных и унарных вызовов в C++03

У меня проблемы с реализацией этого в устаревшем C++, но я почти уверен, что это можно сделать. Скажем, у меня есть функция более высокого порядка, для которой нужны две версии, одна для унарных функций (объекты-функции, функции, функции-члены) temp…
0 ответов

Постепенное создание списка типов в C++

Я пытаюсь найти способ постепенного построения списка типов во время компиляции, который можно использовать во время выполнения без препятствующей реализации. Шкафное решение, которое я видел, здесь. Для меня проблема заключается в использовании мак…
6 ответов

Целое число в C++, метапрограммирование шаблонов

Я хочу сделать функцию, которая возвращает степень целого числа. Пожалуйста, прочитайте решение fmuecke в силу целого числа в C++. Однако я хочу обобщить его решение на произвольный тип T. Поскольку в C++11 есть constexpr, я думаю, это возможно. Наи…
08 май '13 в 14:45
1 ответ

В чем разница между C++ Concepts и C++ Template Constraints?

Как видно из названия, есть что-то под названием Concepts Lite (шаблонные ограничения) и Concept Design для STL. Кто-нибудь может объяснить некоторые фундаментальные различия между ними?
4 ответа

Создать шаблон из аргументов функций?

template<class... Foos> // N = sizeof...(Foos) template<typename... Args> // M = sizeof...(Args) void split_and_call(Args&&... args) { // Using Python notation here... Foos[0](*args[:a]); // a = arity of Foos[0] Foos[1](*args[a:b…
2 ответа

Неоднозначная перегрузка на шаблонных вариационных шаблонах

Связанные с: Неоднозначная перегрузка доступа к шаблонным функциям без аргументов с переменными параметрами Простая функция шаблона не может мгновенно Почему эта переменная функция неоднозначна? Рассмотрим эту пару вариационных шаблонов: template&lt…
2 ответа

"Что случилось с моим SFINAE"?

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

Почему моя специализация шаблона компилируется, если она не выполняется?

Примечание: я понимаю, что многое из того, что я здесь делаю, будет проще в C++11, но я не могу использовать это в своем проекте. Я делаю систему управления контентом. Основные требования: Нужно уметь определять классы "владельца содержимого", котор…
1 ответ

Тип Черты и const/volatile/&/&&&

Когда вы пишете класс черты, используя частичную специализацию шаблона, говорите template <typename> class Foo {}; template <typename T> struct is_instance_of_foo : std::false_type { }; template <typename T> struct is_instance_of_f…
27 фев '15 в 13:29
3 ответа

Может ли шаблонная функция быть аргументом шаблона для другой функции?

Я думал, что сравню некоторые алгоритмы сортировки, но я должен делать шаблоны неправильно: Код #include <iostream> #include <vector> template <typename ForwardIterator> void dummysort(ForwardIterator begin_it, ForwardIterator end_…
09 ноя '17 в 16:50
1 ответ

Разрешено ли двойное / вложенное расширение шаблона вариаций в современном C++?

Я пытался использовать метапрограммирование C++ для создания таких конструкций, как f(g<0>(args...), g<1>(args...), ... g<n-1>(args...)) даные звания f а также g, целочисленные n и переменные аргументы args... Однако я решаю пробле…
1 ответ

Условная компиляция метода-члена void с использованием enable_if

, #include <iostream> #include <type_traits> using namespace std; template<typename T> struct MyClass{ void hello( void) { hello(std::is_same<T,bool>()); } void hello(std::true_type){ cout<<"hello only for bools"<&lt…
04 янв '17 в 22:03
1 ответ

std::any для объектов, которые не могут быть созданы с помощью копирования

У меня есть объект, который содержит unique_ptr и, как таковой, не может быть скопирован без создания глубокой копии (что мне не нужно). Я бы хотел, чтобы std:: any содержал этот объект, но единственная найденная мною альтернатива - сделать так, что…
20 окт '17 в 15:14
2 ответа

Создание sfinae работает для функций с выведенным типом возврата?

Рассмотрим следующий код: // -------------------------------------------------------------------------- // // Preprocessor #include <array> #include <vector> #include <utility> #include <iostream> #include <type_traits>…