Допустим есть некий класс с набором конструкторов.
struct Element {
Element() {}
Element(int) {}
Element(char) {}
Element(SomeOtherElement&) {}
}
И функция:
template<typename Element_t, typename Source, template<typename> class Container>
void initialize_from_source(typename Container<Element_t> &c, Source &s)
{
unsigned int n = s.total();
while(--n) {
Element_t e;
s.init(&e); //<<-- Порядок важен, сперва нужно инициализировать Element_t
c.push(e); //<<-- Прежде чем положить в контейнер
}
}
Есть ли способ "указать" какой конструктор использовать в initialize_from_source()?
Вынести конструирование (например во внешний функтор добавив параметр типа boost::function<Element_t*()> fn) и использовать Element_t* в контейнере не вариант.
N>>Есть ли способ "указать" какой конструктор использовать в initialize_from_source()?
N>>Вынести конструирование (например во внешний функтор добавив параметр типа boost::function<Element_t*()> fn) и использовать Element_t* в контейнере не вариант.
_A_>Ну как минимум у тебя будет конструктор без параметров. Ты же ничего не передал туда. А если будешь передавать значение, то нужный конструктор будет выбран на этапе компиляции. В чем проблема то? И вообще, какую задачу решаешь?
ыыы только хотел тему грохнуть.
Короче нашёл солюшен, просто затупил — move семантика же.
Суть в том что бы вынести конструирование Element из шабланного метода т.к. разные конструкторы Element влияют на его поведение в дальнейшем.
В любом сл. спасибо! Тему можно сносить.
Здравствуйте, nen777w, Вы писали:
FYI,
emplace_back