类声明之外的类转换

时间:2015-02-18 03:58:08

标签: c++ type-conversion operator-keyword

我希望简单的问题。

是否可以在任一类之外定义类转换(等于运算符)?

这源于" api"喜欢我图书馆的图层。所以我可以根据较低级别的库编译选择代码。

示例:

foo.hpp(这是我的来源)

class foo
{
}

bar.hpp(这不是我的来源)

class bar
{
}

conversions.hpp(此文件根据链接的低级别图层更改)

bar operator=(const foo& other)
{
}

运算符将抛出编译器错误,因为它在静态上下文中,应该在类声明中声明。这不是一个真正的选择,因为该类可以改变。

1 个答案:

答案 0 :(得分:0)

您可以在foo中定义隐式转换操作:

class foo
{
 public:
 operator bar() const
 {
  //make bar from this foo
 }
};

您现在可以执行以下操作:

bar b = foo();//b gets copy-initialized using the implicit conversion above
b = foo();//Since bar doesn't have an operator=(const foo&), standard conversions would apply. The user-defined foo to bar conversion kicks in followed by a bar copy/move.