2017-09-26 87 views
0

我在for_each循環中使用具有成員函數的lambda時遇到了編譯錯誤。請參閱下面的代碼片段。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(lstIps), end(lstIps), this->AddAllowedIP); 
} 

錯誤列爲

1> ........ \源\ LIB \ CCI \ SRC \ CommConfig.cpp(70):錯誤C3867: 「CCommConfig :: AddAllowedIP':非標準語法;使用'&'創建 指向成員1> ........ \ Source \ Lib \ cci \ src \ CommConfig.cpp(70): 錯誤C2672:'std :: for_each':不匹配重載函數發現

回答

4

不能使用this->AddAllowedIP得到一個函數對象調用CCommConfig::AddAllowedIPthis,那簡直是不允許的。你可以通過&CCommConfig::AddAllowedIP得到一個指向函數的指針,但是這對你不起作用,因爲它需要一個CCommConfig來調用它。

你應該創建一個lambda:

[this](const string& ip){ this->AddAllowedIP(ip); } 

,或者您可以使用std::bind(雖然它失寵):

std::bind(&CCommConfig::AddAllowedIP, this, std::placeholders::_1) 

雙方將創建一個函數對象,將正確地調用AddAllowedIPthis,因此您可以將它傳遞給for_each

編輯:在再次尋找,你可能只是一個循環更好:

for (const string& ip : lstIps) 
    AddAllowedIP(ip); 
相關問題