J’ai besoin de passer des arguments à une classe wrapper qui ressemble à un exemple minimal comme ceci:
template class Wrapper : Stack { std::array m_oStacks; template Wrapper(std::initializer_list const& size, Args&&... args) : Stack(args), m_oStacks{5,2,3,4,5,6,7,8,9,10} //, m_oStacks(size) //,m_oStacks{size} //,m_oStacks{{size}} { //m_oStacks = { size }; } };
J’ai essayé d’initier le tableau avec la taille initializer_list mais rien ne fonctionne (parties commentées du source), seule la constante {5,2,3,4,5,6,7,8,9,10} fait
Quelqu’un sait la raison et une solution?
Cordialement Matyro
Edit 1: Le problème principal est que TStack (dans la plupart des cas) n’a pas de constructeur par défaut. Je dois donc initialiser le tableau à la construction.
Avec std::initializer_list
:
template class Wrapper { public: Wrapper(std::initializer_list il) : Wrapper(il, std::make_index_sequence{}) { } private: template Wrapper(std::initializer_list il, std::index_sequence) : m_oStacks{{ *(il.begin() + Is)... }} { } std::array m_oStacks; };
DEMO
Avec std::array
:
template class Wrapper { public: Wrapper(const std::array& a) : Wrapper(a, std::make_index_sequence{}) { } private: template Wrapper(const std::array& a, std::index_sequence) : m_oStacks{{ a[Is]... }} { } std::array m_oStacks; };
DEMO 2