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

Как узнать, является ли аргумент, передаваемый функции, классом, объединением или перечислением в С++?
Я хочу определить оператор‹‹ для всех перечислений, чтобы вычислить значение и напечатать, что это перечисление, подобное этому: код: enum AnyEnum{A,B,C}; AnyEnum enm = A; cout << enm <<endl; вывод: This is an enum which...
859 просмотров

Реализация вектора в С++
Недавно я написал реализацию STL Vector в качестве упражнения по программированию. Программа компилируется, но я получаю странную ошибку: terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Я никогда...
66002 просмотров

Как разыменовать тип в С++ 03?
Как получить «разыменованный тип» другого типа в С++ 03? Обратите внимание, что это может быть другой разыменовываемый тип, например std::vector<int>::iterator . например если у меня есть template<typename T> struct MyPointer {...
1838 просмотров

Специализация шаблона метода C ++ только для одного индекса
Я хочу выполнить специализацию шаблона только для одного индекса класса. Например, в следующем коде я хочу создать специализацию всякий раз, когда первым классом является int, независимо от того, что такое второй класс. Есть ли способ реализовать...
228 просмотров

Неоднозначность специализации метапрограммирования шаблонов С++
Итак, я только начинаю заниматься метапрограммированием шаблонов и пишу строковый класс. Я реализовал ToString, Concat, CharAt и Length без особых проблем, связанных с шаблонами. Я пытался реализовать Substring следующим образом: struct Null;...
670 просмотров

Подсчет с помощью шаблонного метапрограммирования?
Я пытался придумать творческое решение этой проблемы (время от времени) в течение некоторого времени, но пока не смог. Недавно я подумал, что это может быть решено с помощью метапрограммирования шаблонов, хотя я не уверен из-за своего относительного...
1606 просмотров

Специализация, которая сама по себе является шаблоном
У меня есть класс шаблонов, для которого у меня есть несколько специализаций. Но следующая специализация — это сам шаблон. Как вы указываете это: template<typename T> class Action { public: void doStuff() { std::cout <<...
348 просмотров

Почему признаки типа С++ 11 не являются шаблонами псевдонимов?
Аналогичный вопрос: Почему type_traits реализованы со специализированными структурами шаблонов вместо constexpr? — но с другим ответом. Я понимаю, что шаблоны псевдонимов не могут быть специализированы и, следовательно, в настоящее...
3574 просмотров

Шаблоны выражений в D
Цель состоит в том, чтобы добиться того же эффекта, что и в этом примере C++ : избежать создания временных шаблонов. Я безуспешно пытался перевести пример C++ на D. Я также пробовал разные подходы. import std.datetime : benchmark; import...
427 просмотров
schedule 11.06.2022

транспонировать логические аргументы функции шаблона в аргументы функции времени выполнения с помощью метапрограммирования шаблона
У меня есть функция, которая принимает несколько логических аргументов шаблона: template<bool par1, bool par2, bool par2> void function(int arg1, int arg2, int arg3); Я хочу автоматически сгенерировать во время компиляции (с любой...
3872 просмотров

Как сделать функцию, которая сжимает два кортежа в С++ 11 (STL)?
Недавно я столкнулся с этой головоломкой, наконец-то смог найти хакерский ответ (используя массивы индексов) и захотел поделиться им (ответ ниже). Я уверен, что есть ответы, использующие рекурсию шаблонов, и ответы, использующие boost ; если вам...
3033 просмотров

Генерация случайных чисел в C++ во время компиляции
Я пытаюсь предварительно вычислить случайные значения, используя библиотеку random С++ 11 во время компиляции. Я в основном следую примерам. Что я здесь делаю неправильно? using namespace std; #include <iostream> #include <vector>...
16135 просмотров

`mpl::plus‹ mpl::int_‹1›, mpl::int_‹2› ›::type` отличается от типа `mpl::int_‹3›`?
В приведенном ниже коде воспроизводится поведение библиотеки boost MPL, которое я действительно не понимаю: #include <boost/type_traits/is_same.hpp> #include <boost/mpl/int.hpp> #include <boost/mpl/plus.hpp> using namespace...
425 просмотров

С++ выполняет итерацию в поле вложенной структуры с ускоренным слиянием адаптировать_структуру
Два stackoverflow ответа предложите подход, использующий fusion adapt_struct для перебора полей структуры. Подход выглядит красиво. Однако как выполнить итерацию в поле, которое само по себе является структурой? Следуя предыдущим ответам, я...
8300 просмотров

Как я могу решить, что мой компьютер работает с прямым порядком байтов или с прямым порядком байтов с помощью метапрограммирования шаблона?
Я знаю способ неметапрограммирования, чтобы решить, является ли ПК прямым порядком байтов или нет. eg: #include <iostream> #include <stdint.h> union A { uint16_t v; char c[2]; }; int main(void) { A a; a.v =...
289 просмотров

Как реализовать класс MultiUnitValue с помощью C++ TMP
Я написал этот класс на VC++, который явно не соответствует стандарту (TBH кажется странным, что он не разрешен стандартом) Как я могу преобразовать его в стандартный С++ 11? Код: #include <functional> template <typename T,...
278 просмотров
schedule 10.07.2022

Как проверить, совпадают ли два типа во время компиляции (бонусные баллы, если он работает с Boost strong typedef)
Мне было интересно, можно ли проверить, совпадают ли 2 типа во время компиляции. То, что я придумал, это (не знаю, работает ли это, потому что это кажется хакерским, а стандарт IDK - это хорошо, поэтому IDK, на что обращать внимание при...
14689 просмотров

С# дженерики, полные по Тьюрингу?
Возможный дубликат: является C# 4.0 во время компиляции завершен? Хорошо известно, что метаязык шаблонов C++ является полным по Тьюрингу. Я предполагаю, что дженерики С# (или Java) не являются (т.е. вы не можете написать произвольную...
155 просмотров

метафункция шаблона для определения специализации шаблона
Вдохновленный этим вопросом , мне интересно, есть ли какая-то проверка во время компиляции, которую можно ввести, чтобы определить, есть ли два заданных шаблона экземпляры: template <typename T> class Templ... typedef...
196 просмотров

BOOST_PP_ITERATION для аргументов переменной длины
Я хочу включить luabind в один из моих проектов. Для этого мне нужно предоставить функцию, которая ведет себя аналогично call_function (см. ниже). Эта функция использует некоторую магию шаблонов (любезно предоставленную Boost), с которой я был...
929 просмотров