谁能告诉我函数f
的参数类型是什么?
int f(void (*(int,long))(int,long)) {}
在尝试编译一些可变参数模板重代码(我自己的 std::thread
包装器)时,我得到了与此类似的类型...
最佳答案
声明
int f(void (*(int,long))(int,long)) {}
声明一个函数 f
返回 int
并将一个指向函数的指针作为参数,该函数接受 int, long
参数并返回一个指向返回 void
并接受参数 int, long
的函数。使用 typedef 作为最内层的函数指针,这变得更具可读性:
typedef void (*fptr)(int, long);
int f(fptr(int, long));
或者使用命名参数,
int f(fptr handler(int, long));
这是完全有效的代码,但是在编译器输出中看到它很奇怪,因为它使用了一个特殊的语法规则:在函数参数列表中,函数类型声明符声明了一个函数指针参数。也就是说,
int f(fptr handler (int, long)); // is equivalent to
int f(fptr (*handler)(int, long));
...并且您希望编译器使用较低的通用形式。
关于c++ - 有人可以向我解释一下 C++ 中复杂的函数指针类型吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28819762/