2013-11-01 28 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