Как вставить производный объект в карту - PullRequest
0 голосов
/ 09 декабря 2018

Я все еще новичок в C ++ и столкнулся с проблемой, когда не могу вставить новый производный класс в карту.

Мой код упрощен следующим образом:

std::map<int, std::unique_ptr<Base_Class> > m;

void func(){
  for(int num = 0; num < 100; n++){
    m.emplace(num, new Derived_Class() );
  }  

}

Что дает мне это:

error: no matching function for call to 'std::pair <const int, std::unique_ptr<Base_Class> >::pair(int&, Derived_Class*)

Я безуспешно пытался использовать:

m.emplace(std::pair(num, new Derived_Class()) );

И что дает мне это:

error: no matching function for call to 'std::pair<const int, std::unique_ptr<Base_Class> >::pair(std::pair<int, Derived_Class*>)

Iне могу понять это и был бы признателен за любую помощь.

1 Ответ

0 голосов
/ 09 декабря 2018
m.emplace(num, std::unique_ptr<Derived_Class>(new Derived_Class()));

Будет путь.Поскольку конструктор unique_ptr, принимающий необработанный указатель, является явным, он не может быть неявно инициализирован из Derived_Class*.Вам нужно явно создать unique_ptr объект для размещения.

Я поставил это решение, потому что вы упомянули , но по-настоящему выгодным способом было бы использовать std::make_unique<Derived_Class>() ( и далее), чтобы избежать повторения и сделать создание unique_ptr "атомарным".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...