所以我有以下简单的类层次结构:
class Parent { ... };
class Child : public Parent { ... };
我想做以下事情:
class Class1 {
Class1(const hash_map<int64, const Parent*>& parent_map) :
parent_map_(parent_map) { ... }
private:
const hash_map<int64, const Parent*>& parent_map_;
};
随后:
hash_map<int64, const Child*> child_map;
Class1 class_1(child_map);
我收到一条错误消息,指出不存在从hash_map<int64, const Child*>
到hash_map<int64, const Parent*>
的转换。
我也尝试用std::unique_ptr
s替换指针,并且看到相同的编译器错误。有什么想法吗?
答案 0 :(得分:2)
以下是另一种建议:
这里实际上只有一个hash_map
个实例。
因此,您只需使用基类声明此实例:
hash_map<int64, const Parent*> map;
然后您可以随意向Parent
添加Child
或map
个实例...
答案 1 :(得分:2)
您可以创建一个新地图,其元素将从原始地图的元素转换而来,例如:
hash_map<int64, const Parent*> parent_map(child_map.begin(), child_map.end());
你必须手动保持两者同步。
答案 2 :(得分:0)
您无法直接执行此操作,因为存储Child对象的容器无法转换为存储Parent对象的容器。您需要逐项进行转换:
hash_map<int64, const Child*> child_map;
// stuff.
hash_map<int64, const Parent*> parent_map(child_map.begin(), child_map.end());
Class1 class_1(parent_map);
或者,正如Kerrek SB建议的那样,只需将指针的hash_map存储到Parent中,您就可以存储它们。