【发布时间】:2020-06-15 17:18:05
【问题描述】:
我有一个抽象类(parent)并且刚刚从它创建了派生类(child),如下所示:
class parent {
public:
virtual string print()=0;
};
template<class T>
class child: public parent{
private:
unordered_map<string, parent*> children;
public:
parent *&operator[](string name) {
return children[name];
}
virtual string print(){
//some jobs...
}
}
好的。现在我使用如下派生类:
child<string> a;
a["test"]->print();
问题就出来了。
我认为问题在于 unordered_map::[] 运算符创建了 parent 类的实例,而不是我想要的 child 类。
如何告诉 unordered_map 创建新项目作为 child
【问题讨论】:
-
在你调用
a["test"]->print();之前你应该在那里添加一个对象,a["test"] = new child<string>;或者在operator[]里面添加if (children.find(name) == children.end()) children[name] = new child<T>;
标签: c++ class inheritance unordered-map