我想创建一个接口(interface)来读取树状结构的配置,例如JSON或XML。为此,我考虑了以下接口(interface):

class ConfigLoader
{
protected:

    class Node
    {
    public:

        virtual ~Node() { }

        virtual int GetAsInt( const Utf8String & name ) const = 0;

        virtual int GetAsInt( const Utf8String & name, int def ) const = 0;

        virtual bool GetAsBool( const Utf8String & name ) const = 0;

        virtual bool GetAsBool( const Utf8String & name, bool def ) const = 0;

        virtual const Node & GetChild( const Utf8String & name ) const = 0;

        // Etc
    };

public:

    virtual ~ConfigLoader() { }

    virtual void Load( const core::Utf8String & sText ) = 0;
};

然后我实现以读取不同的格式类型(JSON,XML等):
class ConfigLoaderJSON : public ConfigLoader
{
protected:

    class Node : public ConfigLoader::Node
    {
    public:

        virtual ~Node() { }

        virtual int GetAsInt( const Utf8String & name ) const;

        virtual int GetAsInt( const Utf8String & name, int def ) const;

        virtual bool GetAsBool( const Utf8String & name ) const;

        virtual bool GetAsBool( const Utf8String & name, bool def ) const;

        virtual const Node & GetChild( const Utf8String & name ) const;
    };

protected:

    Json::Reader m_oReader;

    JSon::Value m_oRoot;

public:

    virtual void Load( const Utf8String & sText );
};

我的问题是:我是否可以创建一个与父类的嵌套类之一具有相同名称的嵌套类? ConfigLoaderJSON::Node和ConfigLoader::Node不会因为ConfigLoader::Node protected 而不是私有(private)而发生冲突吗?

谢谢 !

最佳答案



是的,您被允许,但是在派生类中定义的嵌套类将隐藏基础嵌套类,就像在父类和子类中定义的成员变量一样。



不,它们不会冲突,因为您将使用范围解析运算符访问它们中的每一个(ConfigLoader的节点为ConfigLoader::Node,ConfigLoaderJSON的节点为ConfigLoaderJSON::Node)。
不要将嵌套类设为私有(private)(在这种情况下,因为在派生类实例中将无法访问它)

关于c++ - 嵌套类,继承,名称冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32372150/

10-11 05:20