键入转换为具有命名空间的另一个类

时间:2014-07-11 08:19:58

标签: c++ namespaces type-conversion

通常,可以编写一个转换运算符来转换为另一个类,如

struct A {};

struct B
{
    operator A()
    {
        return A();
    } 
};

现在,如果A struct的命名空间与B不同,那该怎么办?

namespace mars {
struct A {};
}

namespace jupiter {
struct B
{
    operator A()  //??
    {
        return A();
    } 
};
}

operator A()语句应该成为什么?

2 个答案:

答案 0 :(得分:2)

您可以简单地完全限定名称

namespace mars {
  struct A {};
}

namespace jupiter {
  struct B
  {
    operator mars::A()
    {
      return mars::A();
    } 
  };
}

作为建议:尽量不要做像

这样的事情
using namespace mars;

在全局范围内:当应用程序增长时(例如名称冲突),它会污染它并使事情变得更复杂。对于std命名空间,特别是,通常更需要完全限定名称以避免此现象。

答案 1 :(得分:2)

操作员应该成为:

namespace jupiter {
struct B
{
    operator mars::A()
    {
        return mars::A();
    } 
};
}