私はMyItem
のQt::QGraphicsItem
に由来するMyItem
、をstd::unordered_map
に保存したいと思います。私が理解したように、Qt::QGraphicsItem
はコピーできません:コピーコンストラクタはプライベートです。std :: unorderd_mapにあるクラスのオブジェクトをインプレースでどのように構築できますか?
これは問題ありません。私は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"));
MyItem
は、このコンストラクタシグネチャを持っていると仮定すると、 このエラーが発生しました(カット):
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(correspondingKey)、std :: forward_as_tuple(3、3.14、" hello "));'代わりに –