我想调用一个指向成员函数的指针,我从地图中检索它。电话th.fpObjHandler(md, evd, tokenIdx)
似乎是错误的,我尝试了各种不同的语法(例如.*
和->*
),但我似乎无法做到正确。希望这里有人能够提供帮助。如何调用指向从地图中检索的成员函数的指针?
struct TokenHandler
{
int tokenIdx;
eventDataStatus_t (Schema::*fpObjHandler)(MessageData &md, EventDataImpl &evd, int &tokenIdx);
};
Schema::event(MessageData &md, EventDataImpl &evd)
{
int tokenIdx = 0;
std::map<std::string, TokenHandler> tokenHandlerMap;
tokenHandlerMap["timeInterval"] = { -1, &Schema::timeInterval };
// ..
// ....
TokenHandler th = tokenHandlerMap.at(key);
if (th.fpObjHandler != NULL) {
th.fpObjHandler(md, evd, tokenIdx); // THIS RESULTS IN ERROR
//..
//...
}
}
eventDataStatus_t Schema::timeInterval(MessageData &md, EventDataImpl &evd, int &tokenIdx)
{
//..
//...
return OK;
}
Schema.cpp:111:54: error: must use ‘.’ or ‘->’ to call pointer-to-member function in ‘th.TokenHandler::fpObjHandler (...)’, e.g. ‘(... ->* th.TokenHandler::fpObjHandler) (...)’ th.fpObjHandler(md, evd, tokenIdx); ^
@ZeroUltimax,如果我会写'(th。* fpObjHandler)(md,evd,tokenIdx) ',比这会导致错误'fpObjHandler没有在此范围内声明',因此我认为这个问题不同而不是重复。 – Gio