少し問題があります!関数ポインタ+マップ+イテレータ+クラス
class AKSH
{
private:
typedef map<string,void (AKSH::*)()> t_list;
public:
t_list list;
AKSH(){...}
};
AKSH sh;
void AKSH::doWork()
{
map<string,void (AKSH::*)()>::iterator it;
...
if(it != list.end())
{
(sh.*it->second)();
}
int main()
{
AKSH aksh;
aksh.doWork();
}
Iは、2つのオブジェクト(aksh、SH)を生成しなければなりません。どのようにしてイテレータでakshを使うことができますか、またはラインに間違いがありますか(sh。* it-> second)?
この問題についてはわかりませんが、すぐに 'std :: function'をすぐにチェックアウトしてください。 :-)非常に便利になる – Kos
'void(AKSH :: *)()'は関数へのポインタを宣言しません。これは、メンバ関数へのポインタを宣言します。それらは[非常に異なるもの](http://www.parashift.com/c++-faq-lite/pointers-to-members.html#faq-33.1)です。 –