reinterpret_cast class A 的矢量到 class B 的矢量

reinterpret_cast vector of class A to vector of class B

假设我有两个 classes AB,以及一个 class A 的向量,如下所示:

class A {
    int foo;
    int bar;
    void someMethod();
};
class B {
    uint foo;
    uint bar;
    void someOtherMethod();
};
std::vector<A>  va;

我想将 va 解释为 B 的向量,因为 intuint 是可重新解释的。

重新解释的最佳做法是什么? 例如,如果我想在 va 上调用 someOtherMethod(),我可以执行 ((std::vector<B> *)(&va))->someOtherMethod()。但这是最佳做法吗?

在我看来 reinterpret_cast<std::vector<B> >(va).someOtherMethod() 不起作用。

此外,我正在研究 C++03。

--更新--

抱歉我误解了我自己的问题。 然而,我的问题将与这个有很大不同。所以我创建了另一个问题 .

我会尽快关闭这个问题:这个问题可以看作是一个独立的问题,我认为下面的一个答案足以被采纳。

不要。您认为可以做的任何方式都会导致未定义的行为。创建一个新向量并复制值。

程序行为未定义,因为类型不相关。

一个解决方案是编写一个强制转换运算符来将 class B 实例复制到 class A 实例。在classB中写入

operator A() const
{
    A a;
    a.foo = this->foo; // ToDo - check `this->foo` is an appropriate size
    a.bar = this->bar; // ToDo - check `this->bar` is an appropriate size
    return a; // compiler will elide the value copy
}

您可以创建一个联合类型 C,它可以读作 int 或 uint,然后创建一个向量。

union C {
    int s;
    uint u;
};

std::vector<C> va;

但是如果你需要将它传递给一个需要 vector<uint>.

的方法,那将不起作用

在我看来,解决此问题的正确方法是将需要向量的方法制作成模板,以便它可以接受任何容器类型。更好的是,让它像 STL 方法一样并采用迭代器或迭代器对。