我在我的C ++项目中使用了两个独立的第三方库(Qt,cocos2d)。两者都定义了自己的2d和3d矢量版本。我如何实现自定义隐式(或显式)转换方法,以便我不必显式创建这样的新实例:
// mousePosition is of type QPointF
auto position = cocos2d::Vec2(mousePosition.x(), mousePosition.y())
当然我无法真正修改任何一个库的来源。在Obj-C或C#中,我可以使用类扩展。我不确定C ++。有没有比普通全局函数更好的解决方案?
答案 0 :(得分:2)
无法在两种类型之间实现隐式转换而无需更改其中任何一种。这可以用机械方式解释:这种转换必须是构造函数或转换运算符,两者都必须是成员。
更具启发性的解释是,这种隐式转换可能会破坏现有的类型使用(例如。,通过引入歧义)。使用模板,在定义模板后,很容易引入额外的重载(或者,在这个假设的情况下,使其更加可行)。
所以你的转换必须是明确的,然后它是微不足道的:define
B convert(const A&);
A convert(const B&);
根据需要增加A
- B
对;方便的是,它们甚至不需要有不同的名称,因为假设它们之间没有隐含的转换。