문제
최근에 저는 VC2010에서 Lambdas에 대한 지원에 대해 매우 흥분했습니다. 나는이 기능이 C ++를 더 나은 것으로 바꾸는 데있어서의 잠재력을 최대한 활용하기 시작했습니다.
그러나 나는이 잠재력이 Boost 및 QT와 같은 일상 라이브러리에서 Lambdas의 주 스트림 지원에 크게 의존한다는 것을 깨달았습니다.
C ++ 0X의 새로운 기능으로 이러한 라이브러리를 확장 할 계획이 있는지 아는 사람이 있습니까?
Lambdas는 실제로 Boost의 필요성을 대체합니다 :: Lambda와 그와 상호 작용하는 모든 것을 향상시킵니다. QT는 모든 컨테이너에서 Lambdas에 대한 지원을 추가 할 수 있으며 어쩌면 대안을 정의하는 방법으로 SLOT
에스
해결책
Lambdas는 이미 기존 라이브러리에 매우 적합합니다. 함수가 템플릿 매개 변수에 의해 주어진 유형의 함수 객체를 수락하는 모든 곳.
이것은 그들에 대한 가장 큰 것들 중 하나입니다. 그들은 기존의 연습을 멋진 구문으로 체계화하는 언어 기능의 전형적인 예입니다.
분명히 부스트 람다 라이브러리가 중복되지만 새로운 기능을 추가 할 필요는 없습니다.
다른 팁
Lambda의 사용이 라이브러리의 지원에 어떻게 의존하는지 모르겠습니다. Lambdas는 다른 작은 알고리즘을 감싸고 다른 언어/라이브러리 기능과 깔끔하게 맞도록 많은 클래스를 만들 필요가 없습니다.std::function
생각 나다). 기능 객체 또는 기능 포인터를 전달하는 곳마다 Lambdas도 사용할 수 있습니다.
따라서 주로 기존 코드와 라이브러리를 사용하기위한 또 다른 대안을 추가합니다. 라이브러리가 Lambda를 더 잘 지원할 수있는 유일한 방법은보다 기능적인 스타일의 접근 방식을 사용하는 것입니다.
이러한 라이브러리는 관련 C ++ 0X 기능에 대한 적절한 컴파일러 지원이있을 때까지 기다릴 가능성이 있으며 주류 컴파일러가 지원할 때까지 크게 방해하지 않습니다. 숨을 참지 마십시오.
대부분의 라이브러리는 콜백에 표준 기능 포인터를 사용합니다. C ++ 0X Lambdas는 기능 포인터로 사용할 수 있으므로 대부분의 라이브러리를 수정할 필요가 없습니다. 다른 라이브러리는 템플릿을 사용하여 호출 가능한 객체를 가져갈 수 있습니다 (예 : std::foreach
수정할 필요는 없습니다).
라이브러리가 변경 될 수 있다고 생각할 수있는 유일한 C ++ 0X 기능은 강력하게 입력 한 것입니다. enums
. 또한 라이브러리가 사용하기 시작할 수 있습니다 extern
컴파일 시간을 줄이기위한 템플릿.