基本クラスへのポインタが何らかのタイプ(typeid
を使用)であることを最初に確認した場合、パフォーマンスを節約するためにreinterpret_cast
を実行するのが有効ですか?typeidチェックが有効な後reinterpret_castを使用していますか?
class Base {
virtual ~Base() {}
};
class A : Base {};
class B : Base {};
...
class Z : Base {};
以降:私はそれが必要だと思うよう
void fn(Base & msg) {
const auto & tid = typeid(msg);
if (tid == typeid(A)) {
A * ptr = reinterpret_cast<A*>(&msg);
} else if (tid == typeid(B)) {
B * ptr = reinterpret_cast<B*>(&msg);
} ...
...
} else if (tid == typeid(Z)) {
Z * ptr = reinterpret_cast<Z*>(&msg);
}
}
は、私の知る限り、このコードは正常に動作します。しかし、もし私が運が良かったり、実際にはっきりと定義された使用法であるのならば、私は不思議です。この方法でreinterpret_cast
を使用してください。
通常の多型を使用する前に、私はクラスを変更することができないため、そのように構築する必要があります。
全体のデザインが壊れ*信じられないほど*見えます。あなたが一から変更することはできません関連するものを書き換えるだけでは、間違いなく考えて価値がある。 –
'reinterpret_cast'はvtableを考慮しません。あなたはRTTIを失い、未定義の動作をすることができます。だから**いいえ、それは有効ではありません**。 – user1810087
@BaummitAugenは大好きだけど、別のチームの混乱を修正しているだけで、悲しいことに予算を書き換えている:/ – Paladin