Я хочу сохранить ряд объектов MyItem
, , полученных от Qt::QGraphicsItem
, в std::unordered_map
. Как я понял, Qt::QGraphicsItem
не подлежит копированию: экземпляр копии является закрытым.Как я могу на месте построить объект некоторого класса в std :: unorderd_map?
Это прекрасно; Я не хочу копировать MyItem
. Но мне нужно было бы построить MyItem
на месте. Предполагая, что MyItem
имеет этот конструктор подпись:
MyItem::MyItem(int a, double b, std::string c);
И это мой std::unordered_map
:
std::unordered_map< KeyType, MyItem > myItemMap;
Что не так с этой линией, где KeyType
является копируемым и построенной до окопа:
myItemMap.emplace(correspondingKey, MyItem(3, 3.14, "hello"));
Я получаю эту ошибку (вырезать):
use of deleted function 'MyItem::MyItem(const MyItem&)'
: first(std::forward<_U1>(__x)), second(__y) { }
^
'MyItem::MyItem(const MyItem&)' is implicitly deleted because the default definition would be ill-formed:
'QGraphicsItem::QGraphicsItem(const QGraphicsItem&)' is private
Как должны выглядеть аргументы myItemMap.emplace(...)
?
Использовать 'myItemMap.emplace (std :: piecewise_construct, std :: forward_as_tuple (соответствующийKey), std :: forward_as_tuple (3, 3.14,« hello »)); вместо –