具有相同布局的不同类型之间的C ++转换

时间:2015-09-13 00:13:14

标签: c++

如果我有两个相同定义的结构,那么在它们之间进行转换的最佳方法是什么?

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并单独复制成员是一种解决方案,这种情况将在许多函数中出现许多不同的结构对。不幸的是,修改ABFunc1的定义是不可能的,以及Func2的签名。

据我所知,结构AB在内存中的表示方式相同。在不违反任何严格别名的情况下,在两个这样的结构之间进行转换的最快方法是什么?

2 个答案:

答案 0 :(得分:4)

你可以投射指针。但是没有必要。由于你要通过值传递,你需要创建一个正确类型的实例,所以只需要

getInetAddress()

简单。

当直截了当的类型安全代码可以满足你的需要时,不要考虑强制转换。

答案 1 :(得分:0)

您可以在Func2()的定义中使用代理类BA:

myStruct init(){
    myStruct r;
    //some code
    return r;
}

int main(){
    myStruct s = init();
    return 0;
}