Вызов конструктора не по умолчанию для объекта в векторной инициализации - PullRequest
3 голосов
/ 24 ноября 2010

Я хочу инициализировать вектор в списке инициализации конструктора. Вектор состоит из объектов с параметризованным конструктором. Что у меня есть:

Class::Class() : 
   raster_(std::vector< std::vector<Cell> > (60, std::vector<Cell>(80)))
{
...

Как я могу вызвать Cell :: Cell с двумя параметрами в приведенной выше строке? Очевидное:

raster_(std::vector< std::vector<Cell(true,true)> > (60, std::vector<Cell(true,true)>(80)))

не работает.

Ответы [ 2 ]

2 голосов
/ 24 ноября 2010

Вы должны попробовать:

Class::Class() : 
     raster_(60, std::vector<Cell>(80, Cell(true, true)))
{
    /* ... */
}

Обратите внимание, что я удалил бесполезные std::vector<std::vector<Cell> > из инициализатора.Также имейте в виду, что это может быть крайне неэффективным в зависимости от стоимости копирования Cell:

  • . Создается std::vector<Cell> путем копирования в 80 раз предоставленного значения Cell(true, true)
  • Он создает std::vector<std::vector<Cell> >, копируя 60 раз предоставленный вектор (который содержит 80 элементов)!
1 голос
/ 24 ноября 2010

:raster_(std::vector< std::vector<Cell> > (60, std::vector<Cell>(80, Cell(true, true))));

, если raster_ - это то, что принимает вектор.Если сам растр является вектором, то вот так:

:raster(60, std::vector<Cell>(80, Cell(true, true)))

...