Pytania otagowane jako variadic-templates

Szablony różnorodne to szablony, które przyjmują zmienną liczbę parametrów.

8
„Rozpakowywanie” krotki w celu wywołania odpowiedniego wskaźnika funkcji
Próbuję zapisać w std::tuplezmiennej liczbie wartości, które później zostaną użyte jako argumenty wywołania wskaźnika funkcji, który pasuje do przechowywanych typów. Stworzyłem uproszczony przykład pokazujący problem, który staram się rozwiązać: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" …

6
make_unique i idealne przekazywanie
Dlaczego std::make_uniquew standardowej bibliotece C ++ 11 nie ma szablonu funkcji? znajduję std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); trochę gadatliwy. Czy poniższe rzeczy nie byłyby o wiele ładniejsze? auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3); To newładnie ukrywa i wspomina o typie tylko raz. Tak czy inaczej, oto moja próba wdrożenia make_unique: …

1
Jak można wywołać std :: forward dla wszystkich argumentów w funkcji wariadycznej?
Właśnie pisałem generyczną fabrykę obiektów i korzystałem z meta-biblioteki preprocesora boost, aby stworzyć szablon wariadyczny (używając 2010 i nie obsługuje ich). Moja funkcja korzysta z referencji rval i std::forwardaby wykonać doskonałe przekazywanie, i pomyślałem ... kiedy pojawi się C ++ 0X i mam standardowy kompilator, zrobiłbym to z prawdziwymi szablonami …


2
Jakie są zasady dotyczące tokena „…” w kontekście różnych szablonów?
W C ++ 11 istnieją różne szablony, takie jak ten: template< class T, class... Args > unique_ptr<T> make_unique( Args&&... args ) { return unique_ptr<T>(new T(std::forward<Args>(args)...)); } Jest kilka ciekawostek na ten temat: wyrażenie std::forward<Args>(args)...używa obu Argsi argstylko jednego ...tokenu. Ponadto std::forwardjest to niezmienna funkcja szablonu, która pobiera tylko jeden parametr …

4
Jak przechowywać różne argumenty szablonów?
Czy można w jakiś sposób zapisać pakiet parametrów do późniejszego wykorzystania? 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 } } Później: …


10
Pretty-print std :: tuple
Jest to kontynuacja mojego poprzedniego pytania o ładnie zadrukowane pojemniki STL , dla których udało nam się opracować bardzo eleganckie iw pełni ogólne rozwiązanie. W następnym kroku chciałbym dołączyć drukowanie ładnie std::tuple<Args...>przy użyciu szablonów wariadycznych (więc jest to ściśle C ++ 11). Po std::pair<S,T>prostu mówię std::ostream & operator<<(std::ostream & o, …

3
Jak mogę stworzyć sposób kartezjańskiego produktu list typów w C ++?
Wyjaśniające. Zasadniczo powiedz, że mam takie listy typów: using type_list_1 = type_list<int, somestructA>; using type_list_2 = type_list<somestructB>; using type_list_3 = type_list<double, short>; Mogą to być różne listy typów. Jak uzyskać listę typową produktu kartezjańskiego? result = type_list< type_list<int, somestructB, double>, type_list<int, somestructB, short>, type_list<somestructA, somestructB, double>, type_list<somestructA, somestructB, short> >; …

3
Szablony variadic: rozwijaj argumenty w grupach
Mam funkcję, która przyjmuje dwa argumenty: template <typename T1, typename T2> void foo(T1 arg1, T2 arg2) { std::cout << arg1 << " + " << arg2 << '\n'; } I variadic, który powinien przekazywać swoje argumenty parami: template <typename... Args> void bar(Args&&... args) { static_assert(sizeof...(Args) % 2 == 0); ( …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.