私はtypedefを持っています:
typedef S32(iMyDataClass1::*getDataFunction_t)(void);
およびタイプ:
struct functionMap_t {
std::vector<getDataFunction_t> pDataFunctionTable;
struct dataRequestor_t dataRequestor;
};
次に、メンバー変数があります。
functionMap_t FnMap1;
次に、メンバー初期化子リストに設定します。
myClass::myClass() : FnMap1({
{
&iMyDataClass1::getData1,
&iMyDataClass1::getData2,
&iMyDataClass1::getData3
},
dataRequestor1
})
次に、コンストラクターで使用します。
addNewFnMap(FnMap1);
これはすべてうまくいきます。残念ながら、別のクラスへの関数ポインターに拡張することはできませんgetDataFunction_t
。iMyDataClass1
テンプレートを使用してみましたが、回避できない問題に遭遇しました。を使用しようとしてstd::function
います。つまり、元の typedef を (私が思うに) に変更します。
typedef std::function<S32(void)> getDataFunction_t;
この状況で初期化リストを設定する正しい方法は何ですか? ここ使うstd::bind
?
更新: これは、新しいイニシャライザ リストでの私の試みです。これが正しいかどうかはわかりませんが、これはこの質問を投稿する直前に私が持っていたものです:
{
{
(std::bind(&iMyDataClass1::getData1, functionToFetchCorrectObject())),
(std::bind(&iMyDataClass1::getData2, functionToFetchCorrectObject())),
(std::bind(&iMyDataClass1::getData3, functionToFetchCorrectObject()))
},
PGN65370
}