我想创建一个接口(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/