C++ 将A类向量重新解释为B类向量
假设我有两个类A和B,一个类A的向量如下: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
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;