Запитання з тегом «variadic-templates»

Варіадичні шаблони - це шаблони, які приймають змінну кількість параметрів.

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

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 :: переслати всі аргументи у різноманітній функції?
Я просто писав загальну фабрику об'єктів і використовував мета-бібліотеку 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 :: кортеж
Це продовження мого попереднього запитання щодо досить друкованих контейнерів STL , для якого нам вдалося розробити дуже елегантне та повністю загальне рішення. На цьому наступному кроці я хотів би включити досить друк для std::tuple<Args...>використання різноманітних шаблонів (отже, це суворо C ++ 11). Бо std::pair<S,T>я просто кажу std::ostream & operator<<(std::ostream & …

6
Розширення варіативного пакета шаблонів
Я намагаюся вивчити різноманітні шаблони та функції. Я не можу зрозуміти, чому цей код не компілюється: template<typename T> static void bar(T t) {} template<typename... Args> static void foo2(Args... args) { (bar(args)...); } int main() { foo2(1, 2, 3, "3"); return 0; } Коли я компілюю, це не вдається з помилкою: …

5
Як зробити загальні обчислення за неоднорідними пакетами аргументів варіадичної функції шаблону?
ПРОМІСЛЯ: Трохи погравши з варіативними шаблонами, я зрозумів, що досягнення всього, що трохи виходить за межі тривіальних завдань метапрограмування, незабаром стає досить громіздким. Зокрема, я виявив , бажаючи таким чином , щоб виконувати загальні операції над аргументом пакета , такі як ітерації , розкол , петлі в std::for_each-like моди, і …

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, double>, type_list<somestructA, somestructB, …

3
Варіатичні шаблони: розгортайте аргументи в групах
У мене є функція, яка бере два аргументи: 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.