for_each bind2nd mem_fun vs 2005

时间:2013-11-01 15:14:43

标签: stl visual-studio-2005

在VS 2005下遇到STL问题。我受限于VS 2005。

class SpeedTest
{
public:
    void AddDataPair(const std::pair<std::string, double> & datum, const std::string & insertName = "");

private:
    std::map <std::string, double> _Data;
}

void SpeedTest::AddDataPair(const pair<string, double> & datum, const string & insertName)
{
    string key = insertName + '_' + datum.first;
    _Data[key] += datum.second;
}

void SpeedTest::Insert(SpeedTest * toCopy, const string & insertName)
{
    map<string, double>::iterator dataIter;
    map<string, double>::iterator beginIter = toCopy->_Data.begin();
    map<string, double>::iterator endIter = toCopy->_Data.end();

    for_each
    (
        beginIter,
        endIter,
        bind2nd(mem_fun(&INGSpeedTest::AddDataPair)(), insertName)
    );
}

我收到错误C2784:

“的std :: const_mem_fun1_t&LT; _result,_Ty,_Arg&GT; std :: mem_fun(结果( _thiscall _Ty :: *)(_ Arg)const)':

无法推断出'结果( _thiscall _Ty :: *)(_ Arg)const'的模板参数

来自'void(__thiscall INGSpeedTest :: *)(const std :: pair&lt; _Ty1,_Ty2&gt;&amp;,const std :: string&amp;)'

        with
        [
            _Ty1=std::string,
            _Ty2=double
        ]

如果我用for循环替换for_each

for (dataIter = beginIter; 
     dataIter != endIter; 
     ++dataIter)
{
    AddDataPair(*dataIter, insertName);
}

编译得很好。 但是我仍然想知道for_each失败了什么。

非常感谢您随时随地为我提供的知识和努力,

罗伯特

1 个答案:

答案 0 :(得分:1)

std::mem_fun只能包含一个带零或一个参数的成员函数。你需要两个。