In pre-11 C++ ho avuto qualcosa di simile:variadic modello di classe di base trasferimento di chiamata
template<class T,class U,class V>
struct Foo : T,U,V {
bool init() {
if(!T::init() || !U::init() || !V::init())
return false;
// do local init and return true/false
}
};
mi piacerebbe convertire questo in C++ 11 sintassi variadic per ottenere il beneficio dell'argomento flessibile di lunghezza elenco. Capisco il concetto di decomprimere la lista degli argomenti usando la ricorsione ma non riesco a vedere la sintassi giusta. Ecco quello che ho provato:
template<typename... Features>
struct Foo : Features... {
template<typename F,typename... G>
bool recinit(F& arg,G&& ...args) {
if(!F::init())
return false;
return recinit<F,G...>(args...);
}
bool init() {
// how to call recinit() from here?
}
};
io preferirei l'ordine delle chiamate al init classe di base() funzioni da sinistra a destra, ma non è critica.
Non sai cosa stai cercando di ottenere: la tua funzione 'recinit' è infinitamente ricorsiva, o mi sbaglio? come pensi di chiamarlo da 'init()', con quali argomenti? –
Interrompere l'utilizzo di un metodo 'init' e utilizzare un costruttore. –