如果我有两个相同定义的结构,那么在它们之间进行转换的最佳方法是什么?
struct A { int i; float f; };
struct B { int i; float f; };
void Func1(A);
void Func2(B);
Func2
需要通过Func1
参数调用B
并将其设为A
。它看起来像是:
void Func2(B b) { Func1( (A) b); } //Obviously invalid cast
创建A
并单独复制成员是一种解决方案,这种情况将在许多函数中出现许多不同的结构对。不幸的是,修改A
,B
或Func1
的定义是不可能的,以及Func2
的签名。
据我所知,结构A
和B
在内存中的表示方式相同。在不违反任何严格别名的情况下,在两个这样的结构之间进行转换的最快方法是什么?
答案 0 :(得分:4)
你可以投射指针。但是没有必要。由于你要通过值传递,你需要创建一个正确类型的实例,所以只需要
getInetAddress()
简单。
当直截了当的类型安全代码可以满足你的需要时,不要考虑强制转换。
答案 1 :(得分:0)
您可以在Func2()的定义中使用代理类BA:
myStruct init(){
myStruct r;
//some code
return r;
}
int main(){
myStruct s = init();
return 0;
}