スライスの危険性はありますか
result Compare(const Osp::Base::Object &obj1, const Osp::Base::Object &obj2, int &cmp) const {
cmp = ((const Block)obj1).NumSuperBlocks() - ((const Block)obj2).NumSuperBlocks();
}
どこ
class Block : Object {/*Filler*/}
とobj1
とはオブジェクトobj2
であることが保証されていBlock
ますか?
私は使いたくなる:
cmp = ((const Block*)&obj1)->NumSuperBlocks() - ((const Block*)&obj2)->NumSuperBlocks();
しかし、SO の object-slicing タグの簡単な説明を読むと、前者を使用したくなります。しかし、厄介なサイレントスライスは本当に望んでいません。