Tôi đang bối rối về lý do tại sao std::mem_fn
là cần thiết.Tại sao sử dụng mem_fn?
Tôi có chức năng nhận bất kỳ cuộc gọi nào (lambda, con trỏ hàm, v.v.) và liên kết nó với đối số.
Ví dụ:
template<class T>
void Class::DoBinding(T callable) {
m_callable = std::bind(callable, _1, 4);
}
//somewhere else
Item item;
m_callable(item);
Tất cả các mẫu mã tôi đã nhìn thấy làm:
//some defined member function
Item::Foo(int n);
DoBinding(std::mem_fn(&Item::Foo));
Tại sao không thể nó chỉ đơn giản là:
DoBinding(&Item::Foo);
Có vẻ như sau này là callable mà không cần phải sử dụng std :: mem_fn, vậy tại sao nó lại cần thiết?
Không, bạn không cần 'mem_fn' cho điều đó. Bạn cần nó cho những thứ khác. –
Bạn không bao giờ nên chuyển đến 'std :: bind' một giá trị của một loại không xác định. Nếu kiểu đó là một biểu thức ràng buộc, thì hành vi đó là đáng ngạc nhiên. Nói cách khác, 'std :: bind' nên được sử dụng trong mã lá, không phải trong mã chung. –
Điều gì về việc sử dụng lambda thay vì std :: bind? Tôi cảm thấy rằng cú pháp dễ đọc hơn và khi bạn sử dụng C++ 14, nó sẽ bao gồm tất cả (gần như tất cả?) Các trường hợp sử dụng tương tự mà ràng buộc có – AndyG