如何实现两种第三方类型之间的转换?

时间:2018-03-09 16:00:59

标签: c++ c++11 casting type-conversion

我在我的C ++项目中使用了两个独立的第三方库(Qt,cocos2d)。两者都定义了自己的2d和3d矢量版本。我如何实现自定义隐式(或显式)转换方法,以便我不必显式创建这样的新实例:

// mousePosition is of type QPointF
auto position = cocos2d::Vec2(mousePosition.x(), mousePosition.y()) 

当然我无法真正修改任何一个库的来源。在Obj-C或C#中,我可以使用类扩展。我不确定C ++。有没有比普通全局函数更好的解决方案?

1 个答案:

答案 0 :(得分:2)

无法在两种类型之间实现隐式转换而无需更改其中任何一种。这可以用机械方式解释:这种转换必须是构造函数或转换运算符,两者都必须是成员。

更具启发性的解释是,这种隐式转换可能会破坏现有的类型使用(例如。,通过引入歧义)。使用模板,在定义模板后,很容易引入额外的重载(或者,在这个假设的情况下,使其更加可行)。

所以你的转换必须是明确的,然后它是微不足道的:define

B convert(const A&);
A convert(const B&);

根据需要增加A - B对;方便的是,它们甚至不需要有不同的名称,因为假设它们之间没有隐含的转换。