w ampułko-11 C++ miałem coś takiego:o zmiennej liczbie argumentów szablonu klasy bazowej przekazywanie połączeń
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
}
};
chciałbym przekonwertować to do C++ 11 składni o zmiennej liczbie argumentów, aby uzyskać korzyści długości elastycznego argumentu lista. Rozumiem koncepcję rozpakowywania listy szablonów arg przy użyciu rekursji, ale nie widzę prawidłowej składni. Oto, co starałem:
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?
}
};
Wolałbym kolejność połączeń do klasy bazowej init() funkcje do lewej do prawej, ale to nie jest krytyczna.
Nie jesteś pewien, co próbujesz osiągnąć: twoja funkcja 'recinit' jest nieskończenie rekursywna, czy też się mylę? jak spodziewasz się wywołać to z 'init()', z jakich argumentów? –
Zatrzymaj używanie metody 'init' i użyj konstruktora. –