1

クラスメンバー関数ポインターを渡そうとしています

template < typename CLASS, typename TYPE1, typename TYPE2 > 
  void WriteFunctionHelper(CLASS* pOwner, PropInfoType::iterator& it, WriterPtr pw, WriterPtr (Writer::*func)(TYPE1, TYPE2) ) {
     MemberProperty<CLASS,TYPE2> *ptr = (MemberProperty<CLASS, TYPE2> *)it->second;
     const char *propertName = ptr->m_propertyName.c_str(); 
      if ( !ptr->m_getterFn ) { 
        throw; 
      } 
      pw->*func(propertName,(pOwner->*(ptr->m_getterFn))()); 
  }

error C2064: term does not evaluate to a function taking 2 arguments私がやっていることの何が間違っているのか、コンパイラエラーが発生しています

4

2 に答える 2

3

周りにブレーサーを追加しますpw->*func

(pw->*func)(propertName,(pOwner->*(ptr->m_getterFn))());
于 2012-11-09T09:54:16.317 に答える
1

ポインタfuncを使用して、2つのパラメータ(最初TYPE1と2番目)を期待する関数をトリガーできますTYPE2。に送信しようとしています。propertNameこれはタイプconst char *です。2番目のパラメーターも異なるタイプです。これは、実際にはから返されるタイプで(pOwner->*(ptr->m_getterFn))()あり、ではないためTYPE2です。

編集:さらに@DenisErmolinからの回答を参照してください

于 2012-11-09T09:54:22.490 に答える