不同命名空间下相同结构类之间的转换

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.