【发布时间】:2018-03-09 16:00:58
【问题描述】:
我在我的 C++ 项目(Qt、cocos2d)中使用了两个独立的第三方库。两者都定义了自己的 2d 和 3d 向量版本。如何实现自定义隐式(或显式)转换方法,这样我就不必像这样显式创建新实例:
// mousePosition is of type QPointF
auto position = cocos2d::Vec2(mousePosition.x(), mousePosition.y())
当然,我不能真正修改这两个库的源代码。在 Obj-C 或 C# 中,我可以使用类扩展。我不确定C++。有没有比普通的全局函数更好的解决方案?
【问题讨论】:
-
您可以创建自己的自定义向量类型,其中包括将返回正确类型的转换运算符(基于您分配的内容)
-
有一篇关于自定义转换的好文章:en.cppreference.com/w/cpp/language/cast_operator
-
你可以写一个函数来封装内部细节。您可以通过参数重载该函数,以免污染命名空间。
-
正如@UnholySheep 建议的那样,您可以实现自己的中间类,并通过您的中间类拥有隐式转换方法。或者,您的中间体可以是一个轻量级的所有者包装器,围绕它首先看到的任何一个,使用转换方法,因此当您不需要它时,您无需为转换付费。对于有限的维度,可能不值得。
标签: c++ c++11 casting type-conversion