2014-11-26 11 views
5

Nếu tôi gắn một hàm như thế này, sử dụng placeholders tại thời điểm ràng buộcC++ std :: bind

std::bind(memberFunctionPointer, objectPointer, _1, _2); 

là nó sau đó có thể "rebind" nó sau này để thay thế một số/tất cả các placeholders , nhưng không gọi chức năng? Tôi muốn để có thể vượt qua trong một số tham số và sau đó lưu trữ nó, để được gọi sau này. (Trì hoãn callback)

Trả lời

8

Bạn có thể bind một lần nữa:

auto f = std::bind(memberFunctionPointer, objectPointer, _1, _2); 

auto g = std::bind(f, val1, val2); 

g(); // (objectPointer->*memberFunctionPointer)(val1, val2) 
+0

Lưu ý rằng đối tượng f và g trong ví dụ này (chính xác) có các loại hoàn toàn khác nhau. Tôi muốn ràng buộc các đối tượng khác nhau khi chúng trở nên có sẵn/được tạo ra ở các vị trí khác nhau trong mã của tôi, và điều này có nghĩa là chữ ký được sử dụng để truyền đối tượng std :: function cũng phải thay đổi. – tweej

Các vấn đề liên quan