C++ 0x는 및 bind2nd
과 같은 이전 바인더의 사용을 일반용 std::bind
으로 대체했습니다. C++ 0x lambdas는 std::bind
으로 잘 묶이지 만 기본 람다는 중첩 된 typedef가 argument_type
, first_argument_type
, second_argument_type
및 result_type
과 같이 없기 때문에 기본 bind1st 및 bind2nd와 바인딩하지 않습니다. 그래서 나는 std::function
이 필요한 typedef를 노출하기 때문에 lambdas를 이전 바인더에 바인딩하는 표준 방법으로 사용할 수 있다고 생각했습니다.더 이상 사용되지 않는 바인더 및 C++ 0x lambda 사용
그러나 std::function
을 사용하면 인스턴스화하는 동안 함수 유형의 철자를 지정해야하므로이 컨텍스트에서는 사용하기가 어렵습니다.
auto bound =
std::bind1st(std::function<int (int, int)>([](int i, int j){ return i < j; }), 10); // hard to use
auto bound =
std::bind1st(std::make_function([](int i, int j){ return i < j; }), 10); // nice to have but does not compile.
std::function
에 대한 편리한 개체 생성기를 찾을 수 없습니다. std::make_fuction
과 같은 것이 좋을 것입니다. 그런 것이 있습니까? 그렇지 않다면 고전 바인더에 람다를 바인딩하는 다른 더 좋은 방법이 있습니까?
lambda와 함께 클래식 바인더를 사용하면 기능 객체 유형이 위에서 언급 한 typedef를 노출 할 것으로 기대하는 레거시 라이브러리에 유용 할 수 있습니다. 그래서 저는 바닐라 람다가 그러한 라이브러리와 함께 사용될 수 있다고 생각하지 않습니다. – Sumant