Tôi đang cố gắng tìm ra cách để có thể gán một con trỏ hàm cho hàm với số đối số khác nhau.C++: Hàm con trỏ hàm với số biến số đối số
Tôi có một vòng lặp while có một số hàm khác nhau như câu lệnh có điều kiện, vì vậy thay vì viết nhiều vòng lặp với chính xác cùng một mã bên trong tôi muốn có một con trỏ hàm. Tất cả các chức năng có định dạng bool f(...)
. Tôi nghĩ rằng một số mã sẽ minh họa tốt nhất ý của tôi:
int a, b, c, d;
MyClass* my_class;
typedef bool (MyClass::*my_fun_t)();
my_fun_t my_fun;
if (condition1)
my_fun = &MyClass::function_one();
else if (condition2)
my_fun = &MyClass::function_two(a, b);
else if (condition3)
my_fun = &MyClass::function_three(a, b, c);
else if (condition4)
my_fun = &MyClass::function_four(a, b, c, d);
while ((my_class->*my_fun)())
{ ... }
Bây giờ điều này rõ ràng không hoạt động vì các hàm có chữ ký khác nhau. Có thể nào làm cho nó hoạt động theo cách tương tự? Là functoids cái gì tôi nên xem xét?
Làm cách nào bạn biết cách áp dụng con trỏ hàm đó nếu bạn không biết cần bao nhiêu đối số? – mfontanini
Lưu ý rằng cú pháp gán cho con trỏ hàm không hợp lệ, bạn đang * gọi * các hàm, lấy kết quả, lấy con trỏ tới bộ nhớ tạm thời của nó và gán * rằng * cho con trỏ hàm mà bạn đã khai báo trước đó. –
Vâng tôi biết nó không phải là một cú pháp hợp lệ. Nó chỉ cho thấy ý tưởng. – jaho