メンバ関数のアドレスをクラス外に渡す際の基本的な問題を理解しています。私はmem_fn()が解決策であるかもしれないという気持ちを持っていますが、詳細については問題があります。関数宣言でC++のmem_fn(member_function)を宣言するにはどうすればよいですか?
私は
pInstance->valNamedFlags(operand, "Statement types", statementsSubscripts, statementsNames, std::mem_fn(&e::setStatement));
でvalNamedFlagsを呼び出すようにしようとしているクラスEでは、現在
typedef void (*valNamedFlagsCallback)(const int, const bool);
bool valNamedFlags(const OptBlk *operand, const char *description_of_value_or_NULL, const int subscripts[], const char *names[], valNamedFlagsCallback callBack);
として宣言されたクラスpのメンバ関数を持っている(私は)(mem_fnのなしでスタートしましたもちろん、それは古典的な "メンバ関数へのポインタ"の問題です。私は& e :: setStatementを試してみました。& setStatementを参照してください)
FWIW、setStatementは私がmem_fnのを排除する場合
void setStatement(const int ifcid, const bool isAffirmative);
すべての作品として(プロトタイプ宣言)と静的としてsetStatementを宣言しています。私は他のすべての可能性のある問題をすべて排除したと言っていることを指摘しています。私の唯一の問題は、 "メンバー関数へのポインタ"の問題です。残念ながら、setStatement()は静的関数ではなくメンバ関数である必要があります。
私はMS VS 2010で取得しています特定のエラーが
ブールP :: valNamedFlags(定数OptBlkの*、constのchar型*、constのint型[]、constのCHAR * []、P :: valNamedFlagsCallbackです)」:からパラメータ5は変換できません 'のstd :: tr1を:: _ Mem_fn3 < _Rx、_Pmf、_Arg0、_Arg1、_Arg2> P' に ':: valNamedFlagsCallback'
私は独立したコールバックの宣言を維持したいと思いますクラスeの;つまり、私はそれ以上の一般化をしたいので、
に行きたいので、私は行きたくありません。
mem_fn()は適切な解決法ですか、私は基本的にオフですか?もしそうなら、私はどのようにvalNamedFlags()プロトタイプのコールバックを宣言するべきですか?
私は別のアプローチをとるべきですか?
[std :: bind'](http://en.cppreference.com/w/cpp/utility/functional/bind) – StoryTeller
^...と 'std :: function'を見てくださいもうすでにそれがあります。 –
ありがとうございます。私は多くのWebページを見て、私の頭は泳いでいます。私はいくつかの詳細が必要です。だから私はこの質問にここに来たのです。 – Charles