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和第二个参数TYPE2。您正在尝试发送propertName给它,它的类型是const char *. 第二个参数也具有不同的类型,因为它实际上是(pOwner->*(ptr->m_getterFn))()从而不是返回的类型TYPE2

编辑:加上看到@DenisErmolin的答案

于 2012-11-09T09:54:22.490 回答