Вызов определённого конструктора из шаблонного метода
От: nen777w  
Дата: 02.12.15 09:46
Оценка:
Допустим есть некий класс с набором конструкторов.
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* в контейнере не вариант.
Отредактировано 02.12.2015 9:49 nen777w . Предыдущая версия .
Re: Вызов определённого конструктора из шаблонного метода
От: _Artem_ Россия  
Дата: 02.12.15 10:15
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Есть ли способ "указать" какой конструктор использовать в initialize_from_source()?

N>Вынести конструирование (например во внешний функтор добавив параметр типа boost::function<Element_t*()> fn) и использовать Element_t* в контейнере не вариант.
Ну как минимум у тебя будет конструктор без параметров. Ты же ничего не передал туда. А если будешь передавать значение, то нужный конструктор будет выбран на этапе компиляции. В чем проблема то? И вообще, какую задачу решаешь?
Re[2]: Вызов определённого конструктора из шаблонного метода
От: nen777w  
Дата: 02.12.15 10:20
Оценка:
N>>Есть ли способ "указать" какой конструктор использовать в initialize_from_source()?
N>>Вынести конструирование (например во внешний функтор добавив параметр типа boost::function<Element_t*()> fn) и использовать Element_t* в контейнере не вариант.
_A_>Ну как минимум у тебя будет конструктор без параметров. Ты же ничего не передал туда. А если будешь передавать значение, то нужный конструктор будет выбран на этапе компиляции. В чем проблема то? И вообще, какую задачу решаешь?

ыыы только хотел тему грохнуть.
Короче нашёл солюшен, просто затупил — move семантика же.
Суть в том что бы вынести конструирование Element из шабланного метода т.к. разные конструкторы Element влияют на его поведение в дальнейшем.

В любом сл. спасибо! Тему можно сносить.
Re: Вызов определённого конструктора из шаблонного метода
От: Кодт Россия  
Дата: 02.12.15 15:38
Оценка:
Здравствуйте, nen777w, Вы писали:

FYI, emplace_back
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.