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失败。
非常感谢你的任何时间,知识和精力,你能饶了我吧,
罗伯特
叹...要学会仔细阅读。好的,所以我切换到ptr_fun并得到或多或少相同的错误(仍然是C2784,但是不同的文本) – Robert
'ptr_fun'只适用于非成员或静态成员函数。你的是一个非静态成员函数。 –
而使它成为静态函数的唯一方法是传入_Data,这会给它3个参数......所以在VS2005下没有运气,非常感谢您的时间。 – Robert