Сообщение Вызов определённого конструктора из шаблонного метода от 02.12.2015 9:46
Изменено 02.12.2015 9:49 nen777w
Допустим есть некий класс с набором конструкторов.
И функция:
Есть ли способ "указать" какой конструктор использовать в initialize_from_source без привязки к Element_t;
Вынести конструирование (например во внешний функтор добавив параметр типа boost::function<Element_t*()> fn) и использовать Element_t* в контейнере не вариант.
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 без привязки к Element_t;
Вынести конструирование (например во внешний функтор добавив параметр типа boost::function<Element_t*()> fn) и использовать Element_t* в контейнере не вариант.
Вызов определённого конструктора из шаблонного метода
Допустим есть некий класс с набором конструкторов.
И функция:
Есть ли способ "указать" какой конструктор использовать в initialize_from_source()?
Вынести конструирование (например во внешний функтор добавив параметр типа boost::function<Element_t*()> fn) и использовать Element_t* в контейнере не вариант.
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* в контейнере не вариант.