我有以下情况,有两个接口:
interface ILLShapeAttribute
{
virtual void DefineAttribute(const char* pszAttributeName, VARIANT* pvAttributeData) = 0;
};
interface ILLShapeNotification
{
virtual bool IsUsed(const RECT& rcBounds) = 0;
virtual void DefineAttribute(const char* pszAttributeName, VARIANT* pvAttributeData) = 0;
}
和2个功能:
INT LlShapeGetAttributeList(LPCWSTR pwszShapefileName, ILLShapeAttribute* pIAttrInfo);
INT LlShapeEnumShapes(LPCWSTR pwszShapefileName, ILLShapeNotification* pIInfo);
在这两个函数中,我想调用同一个函数,该函数IterateRecords2
应该获取指向函数 DefineAttribute 的指针,例如ILLShapeAttribute::DefineAttribute
和ILLShapeNotification::DefineAttribute
我是这样定义的:
void IterateRecords2(ifstream& file, void (*pDefineAttribute)(const char*, VARIANT*))
{
pDefineAttribute(NULL, NULL); //will be called with real values
}
到现在为止,代码编译并且一切都很好。但后来我试着打电话给IterateRecords2
喜欢
IterateRecords2(file, pIAttrInfo->DefineAttribute);
或者
IterateRecords2(file, pIInfo->DefineAttribute);
我得到编译器错误:
error C3867: 'ILLShapeAttribute::DefineAttribute': function call missing argument list; use '&ILLShapeAttribute::DefineAttribute' to create a pointer to member
请:我知道, ILLShapeNotification 可以从 ILLShapeAttribute 继承,然后传递 *ILLShapeAttribute 而不是函数指针,但我想了解它是如何工作的。
问题:如何将指针传递给DefineAttribute
to IterateRecords2
?