我在我的项目中使用了两个不同的库,它们都提供了一个基本的 rectangle struct
。这样做的问题是似乎没有办法在类型之间插入转换,所以我不能用另一个库中的函数的结果调用一个库中的函数。如果我是其中任何一个的作者,我可以从外部创建转换,但我不能。
图书馆一:
typedef struct rectangle { sint16 x; sint16 y; uint16 w; uint16 h; } rectangle;
图书馆 b:
class Rect {
int x; int y; int width; int height;
/* ... */
};
现在,我无法制作转换器class
,因为 C++ 只会一步一步地寻找转换。这可能是一件好事,因为有很多可能性涉及创建各种类型的新对象。
我不能制作一个接受struct
froma
并提供 from 对象的class
运算符b
:
foo.cpp:123 错误:'operator b::Rect(const rectangle&)' 必须是非静态成员函数
那么,有没有一种明智的方法来解决这个问题?
编辑:
我或许还应该指出,我真的很想要一些可以无缝处理结果的解决方案,因为我不希望成为那个编码员。(虽然我同意,老式的、明确的、转换会是一个不错的选择。另一个分支reinterpret_cast
也有同样的问题..)
编辑2:
实际上,这些建议都没有真正回答我的实际问题,康拉德鲁道夫似乎是正确的。C++ 实际上不能做到这一点。糟透了,但确实如此。(如果有什么不同,我将尝试按照CodingTheWheel的建议进行子类化。