C++中的模板参数继承

Template Parameter Inheritance in C++

本文关键字:参数 继承 C++      更新时间:2023-10-16

我有一段时间没有写C++了,所以我有点生疏。如果我有这样的课程:

class JsonType{
    protected:
        map<string, JsonType>* objects;
}

以及从中继承的类:

class JsonObject : public JsonType{
    public:
        JsonObject(){
            this->objects = new map<string, JsonObject>();
        }
}

为什么我会得到一个编译器错误cannot convert...JsonObject...to...JsonType?既然JsonObject是JsonType,这难道不应该合法吗?

您可以将JsonObject对象添加到映射中,但类型不匹配,无法进行初始化。

编辑:您必须将其初始化为:

this->objects = new map<string, JsonType>();

但如果你有任何一个对象:

JsonType js = new JsonType();

JsonObject js2 = new JsonObject();

JsonType js3 = new JsonObject();

您可以将这些对象中的任何一个添加到如上所述初始化的映射中。

objectsvalue_type不使用JsonObject,而是使用JsonType s。

换句话说,您正在分配错误类型的map以存储到objects中。