[英]C++ Constructor that accepts const reference to abstract class can't initialize std::map
我有一個抽象類A,它為類B中的實現定義了一個接口。A的所有方法都是純虛擬的。
我的問題是帶有簽名B(const A&base)的B的構造函數。 我被卡住了...我想不起來要正確復制std :: map的內容。 請參閱下面的更多細節。 任何幫助將不勝感激!
struct W {
W() = default;
};
template<typename T>
struct V : public W {
V() = default;
};
class A {
public:
A() = default;
virtual std::map<std::shared_ptr<const W>, std::any> getFields() const = 0;
};
template<typename T>
class B : public A {
private:
std::map<std::shared_ptr<const V<T>>, std::any> _fields;
T _value;
public:
B(T value) : _value(value) {
}
explicit B(const A &base) {
for (std::pair<std::shared_ptr<const W>, std::any> field : base.getFields()) {
auto key = std::dynamic_pointer_cast<const V<T>>(field.first);
// the line below does not compile...
_fields.insert(key, field.second);
}
}
std::map<std::shared_ptr<const W>, std::any> getFields() const override {
std::map<std::shared_ptr<const W>, std::any> copy;
copy.insert(_fields.begin(), _fields.end());
return copy;
}
};
struct C {
std::vector<std::shared_ptr<const B<int>>> vec;
void addElement(const A& element) {
vec.push_back(std::make_shared<const B<int>>(element));
}
};
std :: map :: insert()采用鍵值對,而不是單獨的鍵和值:
_fields.insert(std::make_pair(key, field.second));
另外,考慮一下std :: map :: emplace() ,它可以在地圖內部構造鍵-值對:
_fields.emplace(std::move(key), std::move(field.second));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.