Информация об изменениях

Сообщение Вызов определённого конструктора из шаблонного метода от 02.12.2015 9:46

Изменено 02.12.2015 9:49 nen777w

Допустим есть некий класс с набором конструкторов.
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* в контейнере не вариант.
Вызов определённого конструктора из шаблонного метода
Допустим есть некий класс с набором конструкторов.
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* в контейнере не вариант.