Kiểu trả về của mem_fn
và bind
là không được chỉ định. Điều đó có nghĩa, tùy thuộc vào các đối số một loại đối tượng khác được trả về và tiêu chuẩn không quy định chi tiết cách chức năng này phải được triển khai.
Nếu bạn muốn tìm hiểu loại trong một trường hợp cụ thể với một triển khai thư viện cụ thể (vì lý thuyết, tôi hy vọng), bạn luôn có thể gây ra lỗi và nhận loại từ thông báo lỗi. Ví dụ:
#include <functional>
struct X
{
double method(float);
};
int x = std::mem_fn(&X::method);
9 Untitled.cpp cannot convert 'std::_Mem_fn<double (X::*)(float)>' to 'int' in initialization
Trong trường hợp này, lưu ý rằng tên của loại được dành để sử dụng nội bộ. Trong mã của bạn, bạn không nên sử dụng bất kỳ thứ gì có dấu gạch dưới hàng đầu (và một chữ cái viết hoa).
Trong C++ 0x, Tôi cho rằng kiểu trả về sẽ là auto
:)
auto fun = std::mem_fn(&ClassA::method);
Tôi đang cố gắng sử dụng 'std :: tr1 :: function fun = std :: tr1 :: mem_fn (& ClassA :: phương pháp);' nhưng nó không biên dịch, có chuyện gì vậy? –
Tarantula
@Tarantula: Đối tượng có thể gọi được trả về bởi 'mem_fn' có tham chiếu, không phải con trỏ. Xem câu trả lời được cập nhật. –
Vẫn không hoạt động, nguyên mẫu của tôi cho Func là: virtual void Func (đối số MyType *) = 0; – Tarantula