评估C ++指向函数表达式的指针

时间:2014-10-30 16:50:11

标签: c++ stl

我有一个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(...)但结果却出现了同样的错误。

我在做错了什么?  感谢

1 个答案:

答案 0 :(得分:1)

()的优先级高于->*,因此首先评估pfParse(x)。您需要使用括号来对评估进行排序:

(this->*pfParse)(x);