【发布时间】:2008-08-26 14:33:17
【问题描述】:
我在我的项目中使用了两个不同的库,它们都提供了一个基本的矩形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++ 只会一步一步地寻找转换。这可能是件好事,因为有很多可能性涉及创建各种类型的新对象。
我无法创建一个运算符,它从 a 获取 struct 并从 b 提供 class 的对象:
foo.cpp:123 错误:'operator b::Rect(const rectangle&)' 必须是非静态成员函数
那么,有没有明智的方法解决这个问题?
编辑:
也许我还应该指出,我真的很想要一些能够无缝处理结果的解决方案,因为我不希望成为那个编码员。 (虽然我同意,老式的、显式的转换会是一个不错的选择。另一个分支 reinterpret_cast 也有同样的问题..)
编辑2:
实际上,没有一个建议能真正回答我的实际问题,Konrad Rudolph 似乎是正确的。 C++ 实际上不能做到这一点。糟透了,但确实如此。 (如果有什么不同,我将按照CodingTheWheel 的建议尝试子类化。
【问题讨论】: