Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将A类向量重新解释为B类向量_C++_C++03 - Fatal编程技术网

C++ 将A类向量重新解释为B类向量

C++ 将A类向量重新解释为B类向量,c++,c++03,C++,C++03,假设我有两个类A和B,一个类A的向量如下: class A { int foo; int bar; void someMethod(); }; class B { uint foo; uint bar; void someOtherMethod(); }; std::vector<A> va; 我想把va解释为B的向量,因为int和uint是可重新解释的 进行重新解释的最佳实践是什么? 例如,如果我想在va上调用someOtherM

假设我有两个类A和B,一个类A的向量如下:

class A {
    int foo;
    int bar;
    void someMethod();
};
class B {
    uint foo;
    uint bar;
    void someOtherMethod();
};
std::vector<A>  va;
我想把va解释为B的向量,因为int和uint是可重新解释的

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

在我看来,重新解释castva.someOtherMethod不起作用

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

-更新-

对不起,我误解了我自己的问题。 然而,我的问题将与这个问题大不相同。所以我提出了另一个问题


我将很快结束这个问题:这个问题可以被视为一个独立的问题,我认为下面的一个答案足以被接受。

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

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

一种解决方案是编写一个cast操作符,将B类实例复制到a类实例。在B班,写


您可能可以创建一个可以读取为int或uint的并集类型C,并生成一个向量

union C {
    int s;
    uint u;
};

std::vector<C> va;
但是,如果需要将其传递到需要向量的方法中,那么这将不起作用

在我看来,解决这个问题的正确方法是将期望向量的方法制作成模板,这样它就可以接受任何容器类型。更好的是,让它像STL方法一样,使用迭代器或迭代器对。

我有两个类-这太广泛了。你为什么要在他们中间投?我猜:一个是他们的向量,另一个是你的?在我看来,重新解释_castva.someOtherMethod不起作用。-是的,但是您可以使用reinterpret_cast&va->someOtherMethod,其未定义行为的风险与您的C样式强制转换符号相同。请注意,风险不仅仅来自类型的布局-还有别名问题-因此,您的因为int和uint是可重新解释的安全性参数是错误的。这些类型完全不相关。这是类关系传递性被误解的一个重要例子。
union C {
    int s;
    uint u;
};

std::vector<C> va;