我有一个C ++类,它包含以下定义:
class SomeClass:
public BaseClass
{
public:
SomeClass();
bool SomeClass::MyFunc( Json::Value& jsonRoot)
typedef bool(SomeClass::*PFUNC)(Json::Value&);
std::map<std::string, PFUNC> m_map;
}
稍后在c ++代码中,我使用以下行向地图变量添加值:
SomeClass::SomeClass()
{
m_map["func"] = &SomeClass::MyFunc;
}
并在SomeClass的一个方法中执行:
std::map<std::string, PFUNC>::iterator itFunction = m_map.find("func");
if (itFunction != m_map.end())
{
PFUNC pfParse = m_map["func"];
Json::Value x;
this->*pfParse(x);
}
我最终得到以下编译错误:
error C2064: term does not evaluate to a function taking 1 arguments
我甚至尝试明确使用迭代器 - this-&gt; * iterator-&gt; second(...)但结果却出现了同样的错误。
我在做错了什么? 感谢答案 0 :(得分:1)
()
的优先级高于->*
,因此首先评估pfParse(x)
。您需要使用括号来对评估进行排序:
(this->*pfParse)(x);