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 = sizeof...(args); // get number of args X x_array[nargs]; // create X array of that size for (int i = 0; i < nargs; i++) // foreach arg f(x_array[i], args[i]); // call f (doesn't work) g(x_array, nargs); // call g with x_array }
Il motivo per cui non funziona è perché non è ansible utilizzare gli argomenti di pedice in fase di runtime.
Qual è la tecnica migliore per sostituire la parte centrale di h
?
E il vincitore è Xeo:
template X fv(const T& t) { X x; f(x,t); return x; } template void h(Args... args) { X x_array[] = { fv(args)... }; g(x_array, sizeof...(Args)); }
(In realtà nel mio caso specifico posso riscrivere f per restituire x per valore piuttosto che come parametro out, quindi non ho nemmeno bisogno di fv sopra)