람다의 유형을 결정할 수있는 경우 오버로드 된 함수는 두 함수를 모두 가져 와야합니다 std::function
((잘못된 경우 수정하십시오). 질문은 다음과 같습니다. 정의 되었습니까? ( [&]() -> Type {}
)
현재 솔루션의 경우 참조 기준 캡처가 필요하므로 코드에 논리가 포함되어 있습니다.
다음 예제는 문제점을 설명합니다.
#include <iostream>
#include <string>
#include <functional>
void do_some(std::function<void(int)> thing)
{
thing(5);
}
void do_some(std::function<bool(int)> thing)
{
if (thing(10))
{
std::cout << "it's true!" << std::endl;
}
}
int main()
{
int local_to_be_modified = 0;
do_some(
[&](int in)
{
local_to_be_modified = in;
std::cout << "This is void-" << std::endl;
}
);
do_some(
[&](int in) -> bool
{
// error: call to 'do_some' is ambiguous
local_to_be_modified += in;
std::cout << "This is bool-" << std::endl;
return true;
}
);
}
std::function<void(int)>
무언가를 반환하는 람다에서도 생성 될 수 있기 때문에 반환 값이 무시됩니다.