Tôi có một số hàm lambda mà tôi muốn liên kết bằng cách sử dụng hoặc là tăng :: bind hoặc std :: bind. (Đừng quan tâm cái nào, miễn là nó hoạt động.) Thật không may cả hai đều cho tôi những trình biên dịch khác nhau:Làm thế nào để sử dụng hàm lambda với boost :: bind/std :: bind trong VC++ 2010?
auto f = [](){ cout<<"f()"<<endl; };
auto f2 = [](int x){ cout<<"f2() x="<<x<<endl; };
std::bind(f)(); //ok
std::bind(f2, 13)(); //error C2903: 'result' : symbol is neither a class template nor a function template
boost::bind(f)(); //error C2039: 'result_type' : is not a member of '`anonymous-namespace'::<lambda0>'
boost::bind(f2, 13)(); //error C2039: 'result_type' : is not a member of '`anonymous-namespace'::<lambda1>'
Vì vậy, cách giải quyết đơn giản nhất cho điều này là gì?
Tại sao bạn muốn sử dụng liên kết? Bạn không thể chỉ gọi f() hoặc f2 (1)? – Jagannath
@Jagannath: Đây tất nhiên chỉ là một ví dụ đơn giản, nhưng trong thực tế tôi muốn lưu trữ kết quả liên kết vào một đối tượng hàm. – Timo
Tại sao bạn muốn sử dụng liên kết? Tôi nghĩ C + + 0x cung cấp bao đóng? –