假设我有两个课程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
可以重新解释。
重新解释的最佳做法是什么?
例如,如果我想在someOtherMethod()
上调用va
,我可以执行((std::vector<B> *)(&va))->someOtherMethod()
。但这是最好的做法吗?
在我看来,reinterpret_cast<std::vector<B> >(va).someOtherMethod()
不起作用。
此外,我正在研究C ++ 03。
- 更新 -
很抱歉我误解了自己的问题。 然而,我的问题与这个问题有很大的不同。所以我创建了另一个问题here。
我将尽快结束这个问题:这个问题可以看作是一个独立的问题,我认为下面的答案之一已经足够被接受了。
答案 0 :(得分:7)
别。你认为你能做到的任何方式都会导致未定义的行为。创建一个新的向量并复制值。
答案 1 :(得分:2)
程序行为未定义,因为类型不相关。
一种解决方案是编写强制转换操作符以将class B
实例复制到class A
实例。在课程B
中,写下
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
}
答案 2 :(得分:0)
你或许能够创建一个联合类型C,它可以被读作int或uint,而不是制作一个向量。
vector<uint>
但如果您需要将其传递给期望 Unknown activity items supplied: (
"QLPrintPageRenderer: 0x187bc720>",
"UIPrintInfo: 0x1c0b51f0>"
)
的方法,那么这将无效。
在我看来,解决这个问题的正确方法是将需要向量的方法转换为模板,以便它可以接受任何容器类型。更好的是,使它像STL方法一样,并使用迭代器或迭代器对。