람다 복귀되어 다음의 기능을 고려STD없이 람다 복귀 :: 함수
std::function<int()> make_counter()
{
int i = 0;
return [=]() mutable { return i++; };
}
것이 가능하다 std::function
으로 배치하지 않고, 실제 람다 형을 반환?
람다 복귀되어 다음의 기능을 고려STD없이 람다 복귀 :: 함수
std::function<int()> make_counter()
{
int i = 0;
return [=]() mutable { return i++; };
}
것이 가능하다 std::function
으로 배치하지 않고, 실제 람다 형을 반환?
C++ 11 : 모든 람다 식 갖는다 호, I는 (§5.1.2/3) 인용 :
[...]은 고유없는 비 연합 클래스 타입 [를 ...]
이것은 실질적으로 해당 표현식을 몰라도 람다 유형을 알 수 없다는 것을 의미합니다.
이제 아무 것도 포착하지 않으면 함수 포인터로 변환하여 함수 포인터 유형을 반환 할 수 있지만 꽤 제한적입니다.
auto const make_counter = [](int i = 0) {
return [i]() mutable { return i++; };
};
make_counter
(그렇지 않은 템플릿 또는 과부하, 또는 어떤 경우), 다음 작업 것이다 교체하고자하는 경우
는 @Luc는 라운지에서 언급 한 바와 같이
C++ 1y : 예, 일반 함수 (N3582)에 대한 반환 유형 공제를 통해
반칙 유형 공제를 속이고 사용하는 경우 yes you can (Link).
이것은 람다 (lambda를 람다가 사용하는 lambda를 사용하는)를 사용하는 일반적인 비 경고 유도 C++ 11에서 수행 할 수 있지만 C++ 11 자체를 넘어서는 경우에만 가능합니다. .
Not C++ 11, 아직 (아직) 표준이 아닙니다. – Xeo
그래, C++은 여전히 느리다. = [ –
@Fred 다시 링크를보고, 컴파일에 사용 된 명령 행에주의하십시오. –
람다 식은 C++ 11에서도 유효하지 않습니다. 본문에 'return expression; (§5.1.2,4) –
이상이 포함되어 있으면 반환 유형 공제가 작동하지 않습니다. 기술적으로는 기본적으로 동일한 것을 다시 구현하는'my_not_STD_function'을 반환 할 수 있습니다. – Yakk
@Arne : Blame 편집을위한 OP : ... P 고정. – Xeo