Tôi có hai chức năng với số biến và các loại đối sốcon trỏ hàm chức năng khác nhau với các đối số khác nhau trong C
double my_func_one(double x, double a, double b, double c) { return x + a + b + c }
double my_func_two(double x, double p[], double c) { return x + p[0] + p[1] + c }
Tôi muốn sử dụng một con trỏ đến một chức năng để các chức năng tôi định nghĩa ở trên dựa trên một số điều kiện nhận được đúng ví dụ
if (true == condition_1)
pfunc = my_func_one;
else if (true == condition_2)
pfunc = my_func_two;
// The function that will use the function I passed to it
swap_function(a, b, pfunc);
Câu hỏi của tôi là, đối với trường hợp này, tôi có thể xác định con trỏ hàm không? Nếu có, làm thế nào?
Sự hiểu biết của tôi là nguyên mẫu của con trỏ hàm phải giống nhau đối với tất cả các hàm mà nó có thể được trỏ tới.
typedef double (*pfunction)(int, int);
Trong trường hợp của tôi, chúng không giống nhau. Có cách nào khác để làm điều này?
Ngôn ngữ
Tôi đang phát triển trong C và tôi đang sử dụng gcc 4.4.3 biên dịch/mối liên kết
Đặt con trỏ hàm thành 'void *', sau đó thực hiện sắp xếp đúng khi được gọi? Bạn mất tất cả các loại an toàn loại mặc dù. –