Tôi có một tình huống trong đó một hàm gọi một trong số các hàm có thể. Đây có vẻ là một nơi tốt để truyền một hàm như một tham số. Trong câu trả lời Quoara này của Zubkov, có ba cách để làm điều này.
int g(int x(int)) { return x(1); }
int g(int (*x)(int)) { return x(1); }
int g(int (&x)(int)) { return x(1); }
...
int f(int n) { return n*2; }
g(f); // all three g's above work the same
Khi nào nên sử dụng phương pháp nào? Có gì khác biệt? Tôi thích cách tiếp cận đơn giản nhất vậy tại sao không nên sử dụng cách đầu tiên?
Đối với tình huống của tôi, hàm chỉ được gọi một lần và tôi muốn giữ cho nó đơn giản. Tôi có nó làm việc với các đường chuyền của con trỏ và tôi chỉ gọi nó với g(myFunc)
nơi myFunc
là chức năng mà được gọi là cuối cùng.
g(+f);
làm việc cho hai cái đầu tiên, nhưng không phải cái thứ ba
int g(int x(int))
, x
là một con trỏ mặc dù nó không giống như một con trỏ. Khai báo toàn cầu tương ứng khai int x(int);
báo một hàm, không phải là một con trỏ hàm.
x
như là một con trỏ quá.