C++11 c++;11个用于_,每个具有lambda作为成员函数
在for_each循环中使用带有成员函数的lambda时,我面临编译错误。请参阅下面的代码片段C++11 c++;11个用于_,每个具有lambda作为成员函数,c++11,C++11,在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(lstIp
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”:非标准语法;使用“&”创建一个
指向成员1>…。\Source\Lib\cci\src\CommConfig.cpp(70)的指针:
错误C2672:'std::for_each':未找到匹配的重载函数
您不能使用
this->AddAllowedIP
获取函数对象来调用CCommConfig::AddAllowedIP
,这是不允许的。您可以通过&CCommConfig::AddAllowedIP
获取指向函数的指针,但这对您没有帮助,因为它需要一个CCommConfig
来调用它
您应该创建一个lambda:
[this](const string& ip){ this->AddAllowedIP(ip); }
或者你可以使用(尽管它已经不受欢迎):
两者都将创建一个函数对象,该对象将代表您使用this
正确调用AddAllowedIP
,以便您可以将它传递给每个的
编辑:再次查看,使用循环可能会更好:
for (const string& ip : lstIps)
AddAllowedIP(ip);
您不能使用this->AddAllowedIP
获取函数对象来调用CCommConfig::AddAllowedIP
,这是不允许的。您可以通过&CCommConfig::AddAllowedIP
获取指向函数的指针,但这对您没有帮助,因为它需要一个CCommConfig
来调用它
您应该创建一个lambda:
[this](const string& ip){ this->AddAllowedIP(ip); }
或者你可以使用(尽管它已经不受欢迎):
两者都将创建一个函数对象,该对象将代表您使用this
正确调用AddAllowedIP
,以便您可以将它传递给每个的
编辑:再次查看,使用循环可能会更好:
for (const string& ip : lstIps)
AddAllowedIP(ip);