C++传递函数指针
C++ passing function pointer
>我有以下函数
static void p (){
}
我想将指向 p 的函数指针传递到函数 x 中。
void x(void * ptr){
}
我正在尝试以下内容,但它不起作用。
...
x(ptr);
注 x 和 p 属于不同的类。我收到以下编译错误。
invalid conversion from 'void (*)()' to 'void*' [-fpermissive]
它必须是:
void x(void(*function)())
{
// Whatever...
}
如果您使用的是 C++11,则可以使用 std::function:
void x(std::function<void()> function)
{
// Whatever
}
让我们看一下错误消息:
从
'void (*)()'
到'void*'
的转换无效 [-允许]
这意味着void*
(数据指针(是 x
,
中指定的类型但是void (*)()
(函数指针(正在传递。
所以x
改为
void x(void (*ptr)())
{
}
答案在错误消息中。 void*
不是指向函数的指针,void(*)()
(例如(是。您应该重写x
如下所示:
void x(void (*ptr)()) {
}
指向函数的指针是这样写的:
Ret (*name)(Params)
哪里
-
Ret
是脚尖的返回类型 -
name
是指针的名称 -
Params
是 pointee 参数的列表,就像您在其声明中编写它们一样。
例:
double (*ptr)(int, float)
。可以指向一个函数,该函数采用int
和float
并返回double
。
void*
不是函数指针,而是空指针。
若要声明函数指针,请使用 void (*ptr)()
。
我们可以做一些丑陋的指针魔法,像这样:
static void function1( char* c ) {
printf( "%s", c );
}
void function2( void* ptr ) {
void(* func)(char*) = (void(*)(char*))ptr;
func( "a" );
}
int _tmain(int argc, _TCHAR* argv[])
{
void* f = function1;
function2( f );
return 0;
}
这很糟糕,但在这种情况下有效。
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 将唯一指针的指针传递给采用双指针的函数
- 将 char 指针传递给接受对 char 数组的引用的函数
- 在对象构造期间,将指向尚未构造的子对象的指针传递给另一个子对象的构造函数是否危险?
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何通过指针传递lambda函数?
- 谁拥有作为指向 Windows API 函数的指针传递的值?
- 模板到函数的时刻地址是否可以作为指向某个函数的函数指针传递?
- 通过作为指向 C++ 函数的指针传递来访问 std::array 元素的正确方法是什么?
- 如何将函数指针传递给方法,以便它可以在Qt的connect()中使用?
- 将指向多维数组向量中的单个项的指针传递给函数 c++
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- 如何将指向 C 中函数的"DEFINED"常量的指针传递给函数?
- 将函数指针作为函数参数传递的目的
- 将字符串指针传递到C++和Xcode 11.1中不同线程上运行的函数
- 将类指针传递给函数
- 将指针传递给函数 - 为什么我无法打印地址?
- 为什么这是一个按指针传递函数
- 通过指针传递函数参数