返回void*的C++/C函数指针
C++/C function pointers that return void*
我试图调用一个带有参数void(*)(void*, int, const char*)
的函数,但我不知道如何将这些参数传递给该函数。
示例:
void ptr(int);
int function(int, int, void(*)(int));
我正试图调用这样的函数:
function(20, 20, ptr(20));
这可能吗?
您做了一件错误的事情——您试图在调用"function"之前调用"ptr"函数。您应该做的是只传递一个指向"ptr"的指针,并使用从"function"传递的指针调用"ptr",如下所示:
void ptr(int x)
{
printf("from ptr [%d]n", x);
}
int function(int a, int b , void (*func)(int) )
{
printf( "from function a=[%d] b=[%d]n", a, b );
func(a); // you must invoke function here
return 123;
}
void main()
{
function( 10, 2, &ptr );
// or
function( 20, 2, ptr );
}
它给出:
from function a=[10] b=[2]
from ptr [10]
from function a=[20] b=[2]
from ptr [20]
这就是你想要的
对于
function(20, 20, ptr(20));
要想工作,你必须拥有这样的东西
// 'ptr' must return sth (int for example)
// if you want its ret val to be passed as arg to 'function'
// this way you do not have to invoke 'ptr' from within 'function'
int ptr(int);
int function(int, int , int);
通常的技巧是使用typedef进行签名:
typedef void signature_t (void*, int, const char*);
请注意,如果没有typedef
,语法就像一个函数声明。它将signature_t
声明为函数的typedef,因此在实践中您将始终使用指向signature_t
的指针
然后您可以将您的"高阶"函数声明为
int function (int, int, signature_t*);
另见本答复。
函数调用的正确语法是:
function(20,20, &ptr);
如果你觉得迷路了,试试一些教程,或者这个
除非我完全误解了您的代码,否则您正试图通过传递带有参数的函数指针
function(20, 20, ptr(20));
这是不正确和非法的。为了将一个函数作为参数传递给另一个函数,您必须遵循以下语法
function(20, 20, &ptr);
or
function(20, 20, ptr);
尽管我会重新建议离开为了可读性,
不能将ptr(20)传递给此函数,因为只能将指针传递给函数,而不能将指针与参数一起传递。你可以阅读有关函子的文章,theu将帮助你解决这个问题。或者另一种解决方案是将签名更改为
int function(int, int, void(*)(void) );
和写功能
void ptr_wrap(void) {ptr(20);}
所以您可以调用function(20, 20, ptr_wrap);
。但函子可以用更优雅的方式解决这个问题。
ptr(20)
是ptr
的返回值,当您将20
传递给它时。如果您想传递函数(而不是它的返回值),您应该只编写function(20,20,ptr);
相关文章:
- QMetaObject invokeMethod的基于函数指针的语法
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- c++r值引用应用于函数指针
- 模板函数指针和lambda
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 带有类的函数指针
- () 函子后面的括号,而不是函数指针?
- 全局作用域中函数指针的赋值
- 使用"Task"函数指针队列定义作业管理器
- 将成员函数指针作为参数传递给模板方法
- 如何创建对象函数指针C++映射?
- 匹配函数指针作为模板参数?
- 通过函数指针定义类范围之外的方法
- 存储在类中的函数指针
- C++从函数指针数组调用函数
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 整数键映射到头文件中的成员函数指针
- 从类成员函数到类 C 函数指针的转换
- 如何将内联匿名函数分配给C++函数指针
- 将字符缓冲区强制转换为函数指针