【发布时间】:2015-06-15 08:54:09
【问题描述】:
假设我有两个类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<B> *)(&va))->someOtherMethod()。但这是最佳做法吗?
在我看来reinterpret_cast<std::vector<B> >(va).someOtherMethod() 不起作用。
此外,我正在研究 C++03。
-- 更新--
抱歉,我误解了自己的问题。 然而,我的问题将与这个问题大不相同。所以我创建了另一个问题here。
我很快就会结束这个问题:这个问题可以被视为一个独立的问题,我认为以下答案之一足以被接受。
【问题讨论】:
-
I have two classes- 这太宽泛了。 为什么你想在他们之间转换? (我猜:一个是“他们的”向量,一个是“你的”?) -
“在我看来,
reinterpret_cast<std::vector<B> >(va).someOtherMethod()不起作用。” - 是的,但您可以使用reinterpret_cast<std::vector<unsigned>*>(&va)->someOtherMethod()(与您的 C 相同的未定义行为风险) -style 强制转换符号)。请注意,风险不仅来自类型的布局 - 还有别名问题 - 所以你的 " since int and uint are re-interpretable" 论证是错误的。