类型转换到另一个具有名称空间的类

Type conversion to another class with namespace?

本文关键字:空间 有名称 另一个 类型转换      更新时间:2023-10-16

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

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

现在,如果A结构体有一个不同于B的命名空间:

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

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

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

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

作为一个建议:尽量不要做像

这样的事情
using namespace mars;

在全局作用域中:这会污染它,并在应用程序增长时使事情变得更加复杂(例如名称冲突)。特别是对于std名称空间,通常更希望完全限定名称以避免这种现象。

操作符应该变成:

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