2013-11-01 27 views
0

有VS 2005下用STL的问题,我只限于2005年VS的for_each bind2nd mem_fun 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 < _result,_Ty,_Arg >的std :: mem_fun(结果( _thiscall _Ty :: *)(_ ARG)常量)”:

不能推导出模板参数 '结果( _thiscall _Ty :: *)(_ ARG)常量'

从 '无效(__thiscall INGSpeedTest :: *)(常量性病::对< _Ty1,_Ty2> &,常量的std :: string &)'

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

如果我有用于替换的for_each loop

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

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

非常感谢你的任何时间,知识和精力,你能饶了我吧,

罗伯特

回答

1

std::mem_fun只能换一个成员函数取零个或一个参数。你的两个。

+0

叹...要学会仔细阅读。好的,所以我切换到ptr_fun并得到或多或少相同的错误(仍然是C2784,但是不同的文本) – Robert

+0

'ptr_fun'只适用于非成员或静态成员函数。你的是一个非静态成员函数。 –

+0

而使它成为静态函数的唯一方法是传入_Data,这会给它3个参数......所以在VS2005下没有运气,非常感谢您的时间。 – Robert