约定是字母“I”继续进行纯虚拟接口类。通常,我发现我还需要一个具有子类共享功能的部分具体类。所以,
class IFoo {...}
class Foo : public IFoo {...}
当我希望从Foo派生的子类由名称空间区分时,我会遇到命名难题。如,
Bar::Foo
Baz::Foo
因为当我编码
namespace Bar { class Foo : public Foo {} }
毫不奇怪,VS给出的错误是“一个类不能成为它自己的基类”。 (当没有“中间类,因为命名是Bar :: IFoo和Baz :: IFoo时,不是问题。)我可以用
来解决这个问题。class MyFoo : public IFoo
namespace Bar { class Foo : public MyFoo {} }
或
namespace base { class Foo : public IFoo {} }
namespace Bar { class Foo : public base::Foo {} }
但不愿意混淆命名。
我得到了Foo,Bar :: Foo和Baz :: Foo等课程因为明显的混乱而很糟糕。 (例如,添加“使用Bas;”会引入歧义。)是否存在明确与我正在尝试做的命名约定或语法?
答案 0 :(得分:2)
承认你的评论认为拥有所有这些同名的类型是个坏主意,你可以通过在::
前面加上前缀来专门引用全局命名空间中的类型。在这种情况下,这意味着您可以在全局命名空间中引用类型Foo
,而在命名范围的上下文中定义自己的Foo
,通过将全局命名为{{1} }}。所以works:
::Foo