私はC++を使ってゲームコードを書いています。私はChild
のメンバー関数をデリゲートにバインドしたいと思います。継承クラスのメンバーファンク터を渡す
私はこの単純化されたコードのようinit_and_bind
機能を使用したい:私はWidget
クラスでinit_and_bind
を実装したいので、私はコード以下のように実装
class Parent {
protected:
Widget* widget;
};
class Child : public Parent {
public:
void foo() {
widget->init_and_bind(this, &Child::bar);
}
void bar() { /* do something */ }
};
:
// pre-defined in engine
void Delegate::bind(Parent* object, void(Parent::* function)());
void Widget::init_and_bind(Parent* object, void(Parent::* function)()) {
init();
delegate->bind(object, function);
}
しかし、それはありません作業。 init_and_bind
の2番目のパラメータはParentのメンバファンクタ型のみを受け入れるためです。だから私は子供のメンバーのファンクタを渡すことはできません。だから私はテンプレートとreinterpret_cast
を使用しようとしました:
しかし、それも動作しません。 Child
のファンクタをParent
のファンクタにキャストできないためです。
したがって、init_and_bind
の第2引数はどのようなタイプですか?
'static_cast'ではなく、' reinterpret_cast'です。 – StoryTeller
@StoryTellerああ、それは動作します、ありがとう!しかし、なぜ 'reiniterpret_cast'がコンパイルされていないのか分かりません。 –
異なるジョブの異なるキャスト。コンパイラはあなたが正しいことを使っていることをチェックします。キャストする必要がある場合は、常にデフォルトで 'static_cast'で開始してください。 – StoryTeller