C++11 c++;11个用于_,每个具有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

在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”:非标准语法;使用“&”创建一个 指向成员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);