내가 좋아하는 관용구이다 : 나는 "과 같이
auto f = [](auto&& x){myfunction(decltype(x)(x));}
x
형식으로 x
"로 선언되었습니다.
이 작동 방식을 확인하려면 x
이 int&&
인 경우 어떻게되는지 확인하십시오. decltype(x)(x)
은 (int&&)(x)
이며, 이는 x
에 대한 값을 나타냅니다. x
이 int&
인 경우 (int&)(x)
이 참조로 전송되지 않습니다. 참고 카테고리는 decltype(x)
입니다.
auto f = [](auto&& x){myfunction(std::forward<decltype(x)>(x));}
대안 :
지금, auto&&
매개 변수에 대해이에 짧은하지만 동일합니다.
auto
대한 파라미터 :
auto f = [](auto x){myfunction(decltype(x)(x));}
은 추가 카피를 유도
auto f = [](auto x){myfunction(std::forward<decltype(x)>(x));}
동안 대신 이동에서부터
x
.
나는 보통 치료하는 동안 C-스타일 x
는 auto&&
변수가 아닌 경우 너무 위험하다고, decltype(x)(x)
는 최악의 x
의 형태 정확한 복사본을 만들 수 있습니다 캐스트. 그리고 그것의 간결함을 위해 말해야 할 것이 있습니다.
호출 연산자 템플릿으로 람다를 만드는 [C++ 2a] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0428r0.pdf)가 있습니다. 쓰기가 조금 쉬워졌습니다. –
흥미로운 링크. 대답에 직접 링크하는 것이 그만한 가치가 있지 않겠습니까? – skypjack
@skypjack : 초기 단계의 제안이 끔찍하고 투기적인 점을 감안할 때, C++ 14에 관한 질문이기 때문에 의견을 남기는 것이 가장 바람직하다고 생각했습니다. 어쩌면 이것을 받아 들일 실제 결정이 내려지면 우리는 이것을 (7 월?) 업데이트 할 수 있습니다. –