クラスのファミリーのメンバー関数にアクセスするクラスを作成したいと考えています。さらに詳しく説明すると、次のように宣言されたクラス ControlChaos があります。
#define CALL_MEMBER_FN(object, ptrToMember) ((object)->*(ptrToMember))
typedef double (MultiMaps::*mapsGetPtr)();
typedef void (MultiMaps::*mapsSetPtr)(double para);
class ControlChaos
{
public:
ControlChaos(MultiMaps* _map,
mat orbitPoints,
colvec initCond,
mapsGetPtr getPtr,
mapsSetPtr setPtr,
double deltaMax,
double epsilonNeighborhood,
int controlIterations,
int maxIterations);
/* Other stuff here. */
};
タイプ mapsGetPtr および mapsSetPtr などの保護されたメンバー変数を使用します。実装では、使用します
CALL_MEMBER_FN(map,setPtr)(someParameter);
ControlChaosのコンストラクタで関数ポインタを使って指定した関数を呼び出す。アクセスしたいメンバー関数は、MultiMaps から派生したクラスのメンバーです。このコードは、単独で問題なくコンパイルされます。MultiMaps から派生したクラスのメンバー関数を指す関数ポインターを使用して ControlChaos オブジェクトをインスタンス化しようとすると、コンパイラーは、間違った引数の型を指定したと文句を言います。
さらに、この記事は、静的キャストが仕事をすることができることを暗示しているようですが、私はこれが真実であるとは知りませんでした.
これを解決する方法についてのアイデアはありますか?