Нажмите на вектор при назначении в массив - PullRequest
0 голосов
/ 27 сентября 2019

Мне нужно вставить некоторые элементы в существующий вектор, когда я назначаю их массиву.

Я могу инициализировать их, а затем копировать, но мне нужно выполнить обе операции одновременно.

Скажем, есть базовый класс TestBase и производный класс TestOne, TestTwo, TestThree.Я инициализировал их на основе типа, используя перечисление, как показано.У меня есть существующий вектор, в который я хочу вставить эти элементы.

enum class Type : std::uint8_t {
TYPE_ONE,
TYPE_TWO,
TYPE_THREE
}; //enum class Type

struct _ds {
enum class Type type;
std::shared_ptr<TestBase> p_str;
};

std::vector<std::shared_ptr<TestBase>> vec_base_ptrs;

int main(int argc, char *argv[]) {
_ds a_ds[] = {{Type::TYPE_ONE,std::make_shared<TestOne>()},
          {Type::TYPE_TWO,std::make_shared<TestTwo>()},
          {Type::TYPE_THREE,std::make_shared<TestThree>()}};
}

Теперь есть возможность, где я могу сделать следующее, где я могу поместить указатели в вектор, а также получить его.в массиве при том же самом.Возможно ли это.

    _ds a_ds[] = {{Type::TYPE_ONE,{vec_base_ptrs.push_back(std::make_shared<TestOne>())}},
               {Type::TYPE_TWO,{vec_base_ptrs.push_back(std::make_shared<TestTwo>())}},
               {Type::TYPE_THREE,{vec_base_ptrs.push_back(std::make_shared<TestThree>())}}};

Пожалуйста, дайте мне знать, как это сделать.Также предложите, если есть какие-либо другие структуры данных, которые могут помочь в решении этой проблемы, с примечанием, что мне нужно заполнить векторы shared_ptrs, поскольку я получаю это из сторонней библиотеки.

...