将成员函数指针传递给模板函数

时间:2012-11-09 09:47:39

标签: c++ templates

我正在尝试传递一个Class成员函数指针

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我正在做的错误

2 个答案:

答案 0 :(得分:3)

pw->*func

周围添加护腕
(pw->*func)(propertName,(pOwner->*(ptr->m_getterFn))());

答案 1 :(得分:1)

您的func指针可用于触发期望2个参数的函数 - 首先是TYPE1,第二个是TYPE2。您正尝试向propertName发送const char *类型(pOwner->*(ptr->m_getterFn))()。第二个参数也是不同类型的,因为它实际上是从TYPE2而不是{{1}}返回的类型。

编辑:加上@DenisErmolin的答案