有人可以向我解释一个复杂的函数指针类型吗C++
Can someone please explain to me a complicated function pointer type in C++
谁能告诉我函数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));
。并且您希望编译器使用较低的常规形式。
它是一个
函数,它采用指向一个函数的指针,该函数将int
和long
作为参数,并返回一个以int
和long
为参数并返回void
的函数。如果您使用尾随返回类型并命名函数,可能会更清晰:
int f(auto g(int, long) -> void (*)(int, long));
在函数声明中
int f(void (*(int,long))(int,long));
使用函数指针的模糊形式。让我们从基本开始理解此代码。
void (*f_ptr)(long);
将 f_ptr
声明为指向需要 long
参数且不返回任何内容的函数的指针。
作为函数的参数,此函数指针可以声明为
int f1( void f_ptr(int) );
int f2( void (*f_ptr)(int) );
void f_ptr(int)
和void (*f_ptr)(int)
都与函数参数相同。现在将f_ptr
的返回类型更改为指向void
的指针 ( void *
(
int f1( void *f_ptr(int) ); // f_ptr is a function pointer that expects an int type and
// returns a pointer to void
int f2( void *(*f_ptr)(int) );
可以删除函数参数的名称,因此上述声明将变为
int f1( void *(int) );
int f2( void *(*)(int) );
现在,您可以对原始函数声明进行去混淆
int f( void ( *(int, long) ) (int, long) );
如
int f( void ( *(*)(int, long) ) (int, long) );
您可以为函数指针放置一个名称
int f( void ( *(*func_ptr)(int, long) ) (int, long) );
因此,func_ptr
是指向需要 int
和 long
类型参数的函数的指针,并返回指向需要 int 和 long 类型参数并返回 void
的函数的指针。
相关文章:
- 函数复杂度分析
- 函数的时间复杂度是多少?
- 如何计算此排序函数的时间复杂度?
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何计算函数的时间复杂度?
- 此print_star函数的运行时复杂度是多少?
- 在确定函数的时间复杂度时需要帮助
- 如何计算函数的搜索复杂度
- 如何在复杂的算法中处理goto函数?
- 函数参数中使用的复杂文字'i'
- 包装一个函数,在 Cython 中返回复杂类型的向量
- 调用C++具有复杂参数和复杂返回类型的函数 C 代码
- 为什么叮当使我的简单阶乘函数过于复杂
- 使用boost :: Math的Gauss-Kronrod正交正交进行复杂函数的集成
- C :如何在复杂模板类中指定线程函数
- 简单构造函数的复杂编译器输出
- GDB 用户定义函数:如何传递复杂参数
- 如何在 boost.process 间共享内存中使用复杂结构"push_back"函数向量
- 计算Armadillo中复杂对称矩阵的有限特征向量的正确函数
- 在 Cython 中使用 c++ 复杂函数