Описание тега template-meta-programming
Мета-программирование шаблонов - это метод метапрограммирования, в котором шаблоны используются компилятором для генерации временного исходного кода, который объединяется компилятором с остальной частью исходного кода и затем компилируется.
0
ответов
C++ Boost MPL / Fusion векторов динамического push_back
Я новичок в мире TMP, и мне нужна помощь относительно использования векторов в boost mpl или fusion. Итак, вот ситуация: У меня есть API для асинхронных вызовов функций в многопоточной среде, который реализован как библиотека времени выполнения, нап…
22 мар '12 в 19:06
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…
18 ноя '18 в 23:05
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…
20 фев '17 в 13:30
0
ответов
Постепенное создание списка типов в C++
Я пытаюсь найти способ постепенного построения списка типов во время компиляции, который можно использовать во время выполнения без препятствующей реализации. Шкафное решение, которое я видел, здесь. Для меня проблема заключается в использовании мак…
14 авг '14 в 22:02
6
ответов
Целое число в C++, метапрограммирование шаблонов
Я хочу сделать функцию, которая возвращает степень целого числа. Пожалуйста, прочитайте решение fmuecke в силу целого числа в C++. Однако я хочу обобщить его решение на произвольный тип T. Поскольку в C++11 есть constexpr, я думаю, это возможно. Наи…
08 май '13 в 14:45
1
ответ
В чем разница между C++ Concepts и C++ Template Constraints?
Как видно из названия, есть что-то под названием Concepts Lite (шаблонные ограничения) и Concept Design для STL. Кто-нибудь может объяснить некоторые фундаментальные различия между ними?
07 июн '13 в 15:49
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…
29 авг '15 в 17:21
2
ответа
Неоднозначная перегрузка на шаблонных вариационных шаблонах
Связанные с: Неоднозначная перегрузка доступа к шаблонным функциям без аргументов с переменными параметрами Простая функция шаблона не может мгновенно Почему эта переменная функция неоднозначна? Рассмотрим эту пару вариационных шаблонов: template<…
01 ноя '11 в 22:40
2
ответа
"Что случилось с моим SFINAE"?
Я новичок в написании шаблонов метапрограммирования кода (вместо того, чтобы просто читать его). Так что я сталкиваюсь с некоторыми проблемами с нубами. Один из них довольно хорошо описан в посте, не относящемся к SO, который называется "Что случило…
17 июл '12 в 22:58
1
ответ
Почему моя специализация шаблона компилируется, если она не выполняется?
Примечание: я понимаю, что многое из того, что я здесь делаю, будет проще в C++11, но я не могу использовать это в своем проекте. Я делаю систему управления контентом. Основные требования: Нужно уметь определять классы "владельца содержимого", котор…
12 апр '14 в 19:28
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... Однако я решаю пробле…
16 апр '15 в 13:55
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"<<…
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>…
26 мар '17 в 21:26