2017-09-26 1 views
0

for_each 루프에서 멤버 함수와 함께 lambda를 사용할 때 컴파일 오류가 발생합니다. 아래의 코드를 참조하시기 바랍니다.C++ 11 for_each with lambda with member function

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

당신은 thisCCommConfig::AddAllowedIP를 호출하는 함수 개체를 가져 this->AddAllowedIP를 사용할 수 없습니다 발견, 그것은 단순히 허용되지 않습니다. &CCommConfig::AddAllowedIP을 통해 함수에 대한 포인터를 얻을 수는 있지만 그 포인터는 CCommConfig에서 호출해야하기 때문에 도움이되지 않습니다.

당신은 람다를 만들어야합니다

:

[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); 
:
다시보고, 당신은 단지 루프 더 나을 수 있습니다