C++ 0x不贊成使用舊綁定器,例如bind1st
和bind2nd
,而贊成使用通用std::bind
。 C++ 0x lambdas與std::bind
很好地結合,但它們不會與經典的bind1st和bind2nd綁定,因爲默認情況下,lambda沒有嵌套的typedefs,如argument_type
,first_argument_type
,second_argument_type
和。 所以我認爲std::function
可以作爲一個標準的方式來綁定lambda到舊的活頁夾,因爲它暴露了必要的typedefs。使用不推薦使用的綁定器和C++ 0x lambdas
但是,在這種情況下使用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。所以我不認爲香草lambda可以用於這樣的圖書館。 – Sumant 2010-04-07 16:35:43