C ++什么时候命名空间,类名和命名空间::类名冲突

时间:2012-09-25 09:04:00

标签: c++ namespaces

我继承了一些命名错误的代码,当我收到第三方图书馆让我的生活更加复杂时,我很幸运。这就是我最终的目标。

class Something; // third party library

namespace Something {
  class Something;
  class Templated<class TemplateClass>;
}

现在我需要使用第三方库中的“Something”类作为名称空间Something下的新类的TemplateClass参数。我认为这应该有用

class Something; // third party library

namespace Something {
  class Something;
  class Templated<class TemplateClass>;

  class Impl : public Templated< ::Something > {}
}

但是编译器不喜欢它。我编译它的唯一方法是

class Something; // third party library

class Something2 : public Something {} // dirty hack

namespace Something {
  class Something;
  class Templated<class TemplateClass>;

  class Impl : public Templated< Something2 > {}
}

但我真的不喜欢它。 必须是更好的方法。

1 个答案:

答案 0 :(得分:3)

您可以使用其他命名空间:

class Something; // third party library

namespace third_party{
  using ::Something;
}

namespace Something {
  class Something;
  class Templated<class TemplateClass>;

  class Impl : public Templated< ::third_party::Something > {}
}

一般来说,我认为命名你的类和命名空间完全一样是个坏主意。