2013-08-22 3 views
3

나는 Generic lambdas을보고 그것을 얻을 수 없다 - 왜 타입 선언을 유지해야 하는가? 왜 안돼 (x, y)? 컴파일러 공급 업체가 (auto a, auto b)을 지원해야하는 경우 간단한 (a, b)을 지원하는 데 문제가 있습니까?왜 C++ 14 일반 람다는 매개 변수를 자동 지정해야합니까?

+0

오, 나는 사람들에게 아직 사용하지 말라고 말하는 C++ 14 태그에 좋은 메시지를 남겼다. 어쨌든, 나는 제안을 따르는 것을 기억하면서 초기에 유형이없는 매개 변수를 제안했으나 충분히 장황하지 않다고 결정되었다. – chris

+0

필자는 "당신이 제어 할 수없는 특별한 서명을 갖기 위해 람다가 필요하다", "무명 인수는 일상적으로 사용되는 연산자 ++"및 "플래그의 일종으로 특수 유형 전달"과 같은 argumrents에 대해서는 우려하고 있습니다. 너무 rediculasly 잘못되었습니다 ... – myWallJSON

+0

@ myWallJSON : 그건 다른 것보다 당신의 경험에 대해 더 많이 말합니다. 예 : Windows API는 무의미한 람다 (함수 포인터로의 암시 적 변환 때문에)를 허용 할 장소가 가득합니다. 그리고 분명히 Windows에서 서명을 제어하지 않습니다. – MSalters

답변

18

문제는 사용자가 매개 변수의 이름을 생략 할 수 있다는 것입니다. 컴파일러에서 (a,b)ab이 유효한 유형이라면 그 의미는 무엇입니까? (a /*dummy_a*/, b /*dummy_b*/) 또는 (auto a, auto b)? auto을 명시 적으로 입력해야하므로 더 이상 모호하지 않습니다.

+1

그러나 매개 변수의 이름을 제외하면 람다 본문에 어떻게 액세스 할 수 있습니까? 우리가 할 수 없다면, 언제 그러한 기능이 필요합니까? – myWallJSON

+4

@myWallJSON 이러한 매개 변수에 액세스 할 수 없으며 제어 할 수없는 특정 서명이있는 람다가 필요하면 이러한 기능이 필요합니다. 하나의 장소에서 무명의 인자는'operator ++ (int)'입니다. – bames53

+4

@myWallJSON 두 가지 이유 : 일관성 (여기서는 특별한 규칙을 원하지 않으므로)과 일부 기능의 경우 특수한 유형의 매개 변수를 플래그의 일종으로 전달하기 때문에 실제로는 값을 사용하지 않습니다. 매개 변수 자체 템플릿을 사용할 때 특히 유용합니다. 많은 예제를 찾을 수있을 것 같습니다. –

관련 문제