Articles of variadic templates

Il pacchetto di parametri deve essere alla fine dell’elenco dei parametri … Quando e perché?

Non capisco il motivo per cui un pacchetto di parametri deve essere alla fine dell’elenco dei parametri se quest’ultimo è associato a una class, mentre il vincolo è rilassato se l’elenco dei parametri è parte di una dichiarazione del metodo membro. In altri termini, questo compila: class C { template void fn() { } }; […]

C ++ 11 “lambda sovraccaricata” con modello variadico e cattura variabile

Sto studiando un linguaggio C ++ 11 che potrebbe essere chiamato “lambda sovraccarico”: http://cpptruths.blogspot.com/2014/05/fun-with-lambdas-c14-style-part-2.html http://martinecker.com/martincodes/lambda-expression-overloading/ Il sovraccarico di n funzioni con il modello variadico mi è sembrato molto allettante ma si è scoperto che non funzionava con l’acquisizione di variabili: nessuna di [&] [=] [y] [&y] (e [this] ecc se in una funzione membro) portare […]

Come ottengo i tipi di argomento di un puntatore a funzione in una class modello variadic?

Questo è un seguito di questo problema: Funtore generico per funzioni con qualsiasi elenco di argomenti Ho questa class di functor (codice completo vedi link sopra): template class Foo { std::function m_f; public: Foo( std::function f ) : m_f(f) {} void operator()(ARGS… args) const { m_f(args…); } }; In operator () posso accedere agli argomenti […]

Espansione con modelli variadici

Qual è la differenza tra le seguenti 3 chiamate per la funzione della gun ? template void fun(Ts… vs) { gun(A::hun(vs)…); gun(A::hun(vs…)); gun(A::hun(vs)…); } Sono interessato a una risposta che spiega le tre chiamate utilizzando un esempio specifico.

modello variadic ricorsivo per stampare il contenuto di un pacchetto di parametri

Come è ansible creare un modello variadico ricorsivo per stampare il contenuto di un pacchetto di parametri? Sto provando con questo, ma non riesce a compilare: template std::string type_name () { return std::string(typeid(First).name()) + ” ” + type_name(); } std::string type_name () { return “”; } Come posso terminare la ricorsione?

Che cosa fa questo codice modello variadic?

template void for_each_argument(F f, Args&&… args) { [](…){}((f(std::forward(args)), 0)…); } Di recente è stato pubblicato su isocpp.org senza spiegazione.

controlla i parametri dei modelli variadici per l’unicità

Voglio che i parametri del modello variadico debbano essere univoci. So che quando l’eredità multipla, l’ereditarietà delle classi identiche non è consentita. struct A{}; struct B: A, A{}; // error Usando questa regola, ho creato un piccolo codice. #include template struct id{}; template struct base_all : id … {}; template struct is_unique { template static […]

Chiamare una funzione per ogni argomento modello variadic e una matrice

Quindi ho del tipo X : typedef … X; e una funzione di modello f : class void f(X& x_out, const T& arg_in); e quindi una funzione g : void g(const X* x_array, size_t x_array_size); Ho bisogno di scrivere una funzione template variadica che faccia questo: template void h(Args… args) { constexpr size_t nargs = […]

Controlla i tratti per tutti gli argomenti del modello variadic

Background: Ho creato la seguente class C , il cui costruttore dovrebbe prendere N variabili di tipo B& : class A; class B { A* getA(); }; template class C { public: template inline C(Args&… args) : member{args.getA()…} {} private: std::array member; }; Problema: il mio problema è come limitare gli Arg variadici a essere […]

C ++ 11: Posso passare da più argomenti a tupla, ma posso passare da tupla a più argomenti?

Possibile duplicato: Come faccio ad espandere una tupla negli argomenti della funzione modello variadic? “Decompressione” di una tupla per chiamare un puntatore a funzione corrispondente Nei modelli C ++ 11, c’è un modo per usare una tupla come i singoli argomenti di una funzione (possibilmente modello)? Esempio: Diciamo che ho questa funzione: void foo(int a, […]