在for_each循环中使用带有成员函数的lambda时,我遇到了编译错误。请参考以下代码段以供参考。
void CCommConfig::AddAllowedIP(const string& strIp)
{
if (!strIp.empty())
m_allowedIpsList.push_back(strIp);
}
void CCommConfig::AddAllowedIpList(STRING_LIST &lstIps)
{
std::for_each(begin(lstIps), end(lstIps), this->AddAllowedIP);
}
错误列为
1> ........ \ Source \ Lib \ cci \ src \ CommConfig.cpp(70):错误C3867: ' CCommConfig :: AddAllowedIP&#39 ;:非标准语法;使用'&'创造一个 指向成员1的指针> ........ \ Source \ Lib \ cci \ src \ CommConfig.cpp(70): 错误C2672:' std :: for_each':找不到匹配的重载函数
答案 0 :(得分:4)
您无法使用this->AddAllowedIP
获取函数对象以CCommConfig::AddAllowedIP
调用this
,这是不允许的。您可以通过&CCommConfig::AddAllowedIP
获取指向该函数的指针,但这对您没有帮助,因为它需要CCommConfig
来调用它。
你应该创建一个lambda:
[this](const string& ip){ this->AddAllowedIP(ip); }
或者你可以使用std::bind
(虽然它已经失宠了):
std::bind(&CCommConfig::AddAllowedIP, this, std::placeholders::_1)
两者都会创建一个功能对象,代表您AddAllowedIP
正确调用this
,以便将其传递给for_each
。
编辑再次查看它,你可能会更好地使用循环:
for (const string& ip : lstIps)
AddAllowedIP(ip);