Tác dụng của con trỏ hàm
Con trỏ hàm công dụng có 2 cái chính:
Định danh tham chiếu, hay gọi là Interface kiểu hàm. Các ngôn ngữ bậc cao thì có khái niệm Interface; nhưng trong C/C++ không có? Trong C sẽ sử dụng qua con trỏ hàm, C++ có thể sử dụng qua virtual class (abstract)
Callback. Trong Java hay gọi là Listener, C# tương đương là delegate, trong các ngôn ngữ khác gọi là closure. Con trỏ hàm trong C/C++ sử dụng làm callback khá nhiều.
Áp dụng trong lập trình Windows API, MFC hay lập trình Linux.
Ta xem xét ví dụ sau:
#include
// A normal function with an int parameter
// and void return type
void fun(int a)
{
printf("Value of a is %d\n", a);
}
int main()
{
// fun_ptr is a pointer to function fun()
void (*fun_ptr)(int) = &fun;
/* The above line is equivalent of following two
void (*fun_ptr)(int);
fun_ptr = &fun;
*/
// Invoking fun() using fun_ptr
(*fun_ptr)(10);
return 0;
}
Kết quả ta có :
Value of a is 10
Ở đây ta đã khai báo và định nghĩa một hàm
fun
. Sau đó ta tạo một con trỏ, trỏ tới hàm fun bằng:void (*fun_ptr)(int) = &fun;
Có thể viết lại dòng trên bằng 2 dòng tương đương sau đây:
void (*fun_ptr)(int);
fun_ptr = &fun;
Lúc này ta gọi hàm fun() bằng cách sử dụng fun_ptr như sau:
(*fun_ptr)(10);
Lưu ý ở đây ta đã khai báo kiểu của tham số là int nên không cần phải typecast về int trước.
Không có nhận xét nào:
Đăng nhận xét