我正在尝试传递一个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
我正在做的错误
答案 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的答案