[英]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*'
無效轉換 [-fpermissive]
這意味着void*
(數據指針)是x
指定的類型,
但是void (*)()
(函數指針)被傳遞了。
所以將x
改為
void x(void (*ptr)())
{
}
答案在錯誤消息中。 void*
不是指向函數的指針, void(*)()
(例如)是。 您應該按如下方式重寫x
:
void x(void (*ptr)()) {
}
一個指向函數的指針是這樣寫的:
Ret (*name)(Params)
在哪里
Ret
是指針的返回類型name
是指針的名稱Params
是指針對象的參數列表,正如您將它們寫在其聲明中一樣。例子 :
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;
}
這很糟糕,但它在這種情況下有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.