我知道,通常,一個函數指針聲明如下:C++函數指針語法
void __stdcall my_func(int i) {} // for assigning
void (__stdcall * my_ptr)(int) = &my_func;
現在我有幾個功能,這需要一個函數指針作爲自己的論據:
void calling_func(void (__stdcall * callback)(int)) { *callback(1); }
在頭文件,我剛剛刪除的東西的名稱:
void calling_func(void (__stdcall *)(int));
和voilá,那工作...並得到我上墨:如果這是一個完整的類型聲明,那麼對於函數指針,是否還可以使用正常的TYPE NAME = VALUE
語法?
我試圖聲明:
(void (__stdcall *)(int)) callback = &my_func;
,它還會編譯!爲什麼這不經常使用?這個符號有缺陷嗎?對我來說,它似乎會大大簡化函數指針的使用......例如:在一般情況下,它是typedef OLDNAME NEWNAME
,只是函數指針就是這種奇怪的從裏到外的語法,其中新名稱實際上位於整個表達。更不用說功能返回函數指針的符號...
好地方。我無法弄清楚他在那裏做什麼! – 2011-04-05 19:07:23