Вопросы с тегом «variadic-templates»

Шаблоны с переменным числом параметров - это шаблоны, которые принимают переменное количество параметров.

8
«Распаковка» кортежа для вызова соответствующего указателя на функцию
Я пытаюсь сохранить в std::tupleразличном количестве значений, которые позже будут использоваться в качестве аргументов для вызова указателя функции, который соответствует сохраненным типам. Я создал упрощенный пример, показывающий проблему, которую я пытаюсь решить: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << …

6
make_unique и идеальная пересылка
Почему std::make_uniqueв стандартной библиотеке C ++ 11 нет шаблона функции? я нахожу std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); немного многословно Разве следующее не будет намного лучше? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); Это newхорошо скрывает и упоминает тип только один раз. Во всяком случае, вот моя попытка реализации make_unique: template<typename T, …

1
Как можно вызвать std :: forward для всех аргументов в вариативной функции?
Я просто писал универсальную объектную фабрику и использовал мета-библиотеку препроцессора boost для создания вариативного шаблона (с использованием 2010, а он их не поддерживает). Моя функция использует ссылки rval иstd::forward выполняет идеальную пересылку, и это заставило меня задуматься ... когда выйдет C ++ 0X и у меня будет стандартный компилятор, я …

2
Что означает токен «……»? т.е. оператор двойного многоточия в пакете параметров
Просматривая текущую реализацию новых заголовков C ++ 11 в gcc, я наткнулся на токен «......». Вы можете проверить, что следующий код компилируется нормально [через ideone.com]. template <typename T> struct X { /* ... */ }; template <typename T, typename ... U> struct X<T(U......)> // this line is the important one …

2
Каковы правила для токена «…» в контексте вариативных шаблонов?
В C ++ 11 есть вариативные шаблоны, подобные этому: template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ) { return unique_ptr<T>(new T(std::forward<Args>(args)...)); } В этом есть некоторые любопытства: выражение std::forward<Args>(args)...использует оба Argsи, argsно только один ...токен. Кроме того std::forward, это невариная шаблонная функция, принимающая только один параметр шаблона …

4
Как хранить аргументы вариативного шаблона?
Можно ли как-нибудь сохранить пакет параметров для последующего использования? template <typename... T> class Action { private: std::function<void(T...)> f; T... args; // <--- something like this public: Action(std::function<void(T...)> f, T... args) : f(f), args(args) {} void act(){ f(args); // <--- such that this will be possible } } Потом позже: void …

1
C ++ 11: количество параметров функции шаблона с переменным размером?
Как я могу подсчитать количество аргументов функции вариативного шаблона? то есть: template<typename... T> void f(const T&... t) { int n = number_of_args(t); ... } Как лучше всего реализовать number_of_argsвышеперечисленное?

10
Довольно печать std :: tuple
Это продолжение моего предыдущего вопроса о хорошо печатаемых контейнерах STL , для которого нам удалось разработать очень элегантное и полностью общее решение. На этом следующем шаге я хотел бы включить красивую печать std::tuple<Args...>с использованием вариативных шаблонов (так что это строго C ++ 11). Для std::pair<S,T>, я просто говорю std::ostream & …

3
Как я могу создать способ декартово произведение списков типов в C ++?
Самоочевидно. В основном, скажем, у меня есть списки типов, например, так: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Они могут быть различными числами списков типов. Как я могу получить список картезианского продукта? result = type_list< type_list<int, somestructB, double>, type_list<int, somestructB, short>, type_list<somestructA, somestructB, …

3
Variadic шаблоны: раскрыть аргументы в группах
У меня есть функция, которая принимает два аргумента: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } И переменный, который должен передавать свои аргументы в парах: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % 2 …

5
Как сделать групповую или парную складку пакета параметров?
template<class Msg, class... Args> std::wstring descf(Msg, Args&&... args) { std::wostringstream woss; owss << Msg << ". " << ... << " " << args << ": '" << args << "' ";//not legal at all //or owss << Msg << ". " << args[0] << ": '" << args[1] << …
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.