不同命名空间下相同结构类之间的转换
Conversion between classes with the same structure under different namespaces
假设我在命名空间 AAA
下有一个 class A
,其定义如下:
namespace AAA {
class A
{
int x;
std::vector<double> y;
A* ptr;
};
}
我还有另一个 class B
具有与以下相同的结构,但它位于不同的命名空间下 BBB
、
namespace BBB {
class B
{
int x;
std::vector<double> y;
B* ptr;
};
}
我知道做到这一点的正确方法是首先只有一个定义,但现在假设我们无法改变存在 AAA::A
class 和BBB::B
class。有什么方法可以将 A
对象转换为 B
对象?
没有任何安全转换。最好的是 static_assert(sizeof(A) == sizeof(B), "Different Size") 然后是勇敢的 reinterpret_cast.
假设我在命名空间 AAA
下有一个 class A
,其定义如下:
namespace AAA {
class A
{
int x;
std::vector<double> y;
A* ptr;
};
}
我还有另一个 class B
具有与以下相同的结构,但它位于不同的命名空间下 BBB
、
namespace BBB {
class B
{
int x;
std::vector<double> y;
B* ptr;
};
}
我知道做到这一点的正确方法是首先只有一个定义,但现在假设我们无法改变存在 AAA::A
class 和BBB::B
class。有什么方法可以将 A
对象转换为 B
对象?
没有任何安全转换。最好的是 static_assert(sizeof(A) == sizeof(B), "Different Size") 然后是勇敢的 reinterpret_cast.