c++ - 有人可以向我解释一下 C++ 中复杂的函数指针类型吗

标签 c++ types function-pointers

谁能告诉我函数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/

相关文章:

c++ - 如何在 DirectX 上加载纹理?

c++ - 使用 CMake 将资源(例如,着色器代码;图像)嵌入到可执行文件/库中

ios - 如何在实例方法中调用类型方法

c++ - reinterpret_cast 指向 void(*&)() 的成员函数指针

c++ - 将 double * 赋值给 V[3]

c++ - 这段代码是如何工作的?俯仰和偏航

java - train Cv Normal Bayes Classifier opencv 中的组件掩码是什么?

c++ - 在函数指针之间转换

c++ - 如何在 opencv c++ 中为不同的 Matrix 类型编写方法而不明确指定 Mat 类型

javascript - 让 TypeScript 明白对象属性不能被取消定义?