C ++名称冲突与typedef别名和继承名称

时间:2015-11-26 11:33:36

标签: c++ inheritance namespaces typedef

我遇到名称冲突问题。我正在编辑大规模的typedefed包装系统,我想避免跟随名称冲突:

namespace NS{
  struct Interface{};
}
struct OldInterface: private NS::Interface{};
typedef OldInterface Interface;
struct Another : Interface{ // Derived correctly from OldInterface
  Another(Interface p){} // C2247 - in struct scope Interface means NS::Interface
};

我尝试过命名空间 - 但是在对象中它是隐式剪切的。 我也尝试过私有继承,这导致了另一个错误。

所以问题:这是如何使用上述名称的方式? 例如,如何强制结构范围使用命名空间的继承名称?

1 个答案:

答案 0 :(得分:0)

您可以明确声明您希望全局命名空间中的Interface

struct Another : Interface{
  Another(::Interface p){}
  //      ^^
};

如果您发现自己需要对此进行大量限定,则可以为该类型引入一个本地别名:

struct Another : Interface{
  using Interface = ::Interface;
  //or typedef ::Interface Interface if you can't use C++11
  Another(Interface p){}
};