私はもう一度レンガを打ってきました。もう一度何か私はそれが間違っている理由を見ていないし、それを動作させる方法がわからない:文は完全に無視されます(コンパイラによって省略されたかのように)
私はクラス Humanのインスタンスを持っています。クラス Humanは、 Objectから派生しています。 Objectクラスには、 "PerformStep"と呼ばれる奥行き関数があります。 Humanクラスはこの関数をオーバーロードします。 Humanクラスも "WalkAction"という機能を持っています。これで、PerformStep - Byメンバー関数ポインタの間にこの "walkaction"を呼びたいと思います。
私はポインタでこれを行うのが好きです:
人は愚かです。彼らはを知っています。はどのように歩くのですか?だから、神のインスタンスはステップ中に尋ねられるでしょう: "私は今何をすればよいのですか" - そして、その神のインスタンスは、正しいメンバ関数へのポインタを返します。
virtual void PerformStep()
{
postion.x += 0; //redundant line to check for the debugger
CALL_MEMBER_FN(*this,&Human::WalkAction);
Object::PerformStep();
}
人間:: WalkAction:
void WalkAction(){
position.x += 1;
}
CALL_MEMBER_FN(マクロ):
CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
問題は、私はデバッグモードでプログラムを実行すると、それは完全にが無視ということです関数ポインタを使用します。 - ステートメントごとにステートメントを実行すると、行をジャンプします。ウォークアクションにブレークポイントを置くと、ブレークポイントに到達しません。特定の行にブレークポイントを置くと、ブレークポイントは次のライン。
ここに何が起こっているのですか?
マクロは、コードを読みにくくするだけです。 C++のFAQはこの点で間違っています。適切な構文を学ぶことは自明であり、すでに理解している構文を混同することはありません。 – GManNickG