Tôi đã quen với cú pháp nhìn thấy như thế này cho con trỏ hàmCú pháp của C++ mẫu với các thông số loại chức năng
int (*pointer_name) (float, char *);
void call_function (void (*)(int), int);
Trong một số C++ 03 thư viện chức năng tôi thấy loại được sử dụng theo cách này:
abc::function<void(*)(int,float)> f;
Trong C++ 11 của std::function
tôi thấy loại nhường chỗ này
std::function<void(int,float)> f;
có một thiếu (*)
. Tại sao?
C++ 03 function<T>
có T
là một loại giống hệt với con trỏ hàm tương ứng. Thật dễ dàng để tưởng tượng việc thực hiện.
std::function
trong C++ 11 được hỗ trợ bởi các cải tiến ngôn ngữ cốt lõi. Có các loại đối số mẫu được mở rộng để đáp ứng khả năng gọi không?
Điều này đẹp hơn rất nhiều so với cú pháp con trỏ tới sách giáo khoa! Tôi tự hỏi tại sao chúng ta không dạy nó theo cách này bình thường ... – spraff
@spraff: Có lẽ vì nó là một sự đổi mới tương đối gần đây, và hầu hết các sách giáo khoa đều có doanh thu rất chậm. Tôi vẫn thấy những người học với Borland Turbo C++, mà dường như có rất nhiều rắc rối với cú pháp này. – greyfade