Сообщение Re: setParams для родственной иерархии классов с Variadic Te от 28.04.2017 13:16
Изменено 28.04.2017 13:19 Evgeny.Panasyuk
Re: setParams для родственной иерархии классов с Variadic Te
Здравствуйте, gencoder, Вы писали:
G>
Судя по тому что родитель ничего не знает о потомке, здесь придётся стирать типы. Например запихнуть std::tuple с параметрами в boost::any, а в потомке сделать any_cast (либо сделать более эффективный аналог any для данного случая — тут можно обойтись без аллокации, так как данные живут вверху стэка)
G>
G>A<int>* ptr = new B<int>;
ptr->>setParams(1,2); // m_i=1, m_j=2
G>
Судя по тому что родитель ничего не знает о потомке, здесь придётся стирать типы. Например запихнуть std::tuple с параметрами в boost::any, а в потомке сделать any_cast (либо сделать более эффективный аналог any для данного случая — тут можно обойтись без аллокации, так как данные живут вверху стэка)
Re: setParams для родственной иерархии классов с Variadic Te
Здравствуйте, gencoder, Вы писали:
G>
Судя по тому что родитель ничего не знает о потомке, здесь придётся стирать типы. Например запихнуть std::tuple с параметрами (или указателями на них) в boost::any, а в потомке сделать any_cast (либо сделать более эффективный аналог any для данного случая — тут можно обойтись без аллокации, так как данные живут вверху стэка).
Если опустить runtime проверку типа (что делать в большинстве случаев не нужно), то достаточно передавать void* на tuple, а в потомке делать static_cast.
G>
G>A<int>* ptr = new B<int>;
ptr->>setParams(1,2); // m_i=1, m_j=2
G>
Судя по тому что родитель ничего не знает о потомке, здесь придётся стирать типы. Например запихнуть std::tuple с параметрами (или указателями на них) в boost::any, а в потомке сделать any_cast (либо сделать более эффективный аналог any для данного случая — тут можно обойтись без аллокации, так как данные живут вверху стэка).
Если опустить runtime проверку типа (что делать в большинстве случаев не нужно), то достаточно передавать void* на tuple, а в потомке делать static_cast.