1樓:BinGostar
將bar函式改為如下
void
bar()
;test(pp);}
2樓:tkzzz
可以定義乙個函式指標第乙個引數是void* 然後傳遞的時候第乙個引數就是類位址因為在cpp裡面類成員函式的呼叫就是第乙個引數是類位址
具體如下:
#include
template
F>void *f2a(F f)// function to addresscvt; cvt.f= f;return cvt.p; }template F>Fa2f (void*p )// address to functioncvt; cvt.p= p;return cvt.f; }structA}; void call (void*f ,void*o )int main (int argc ,char **args) 3樓:Misaka9468 補充一下,利用lambda表示式或者bind函式的做法。 #include using namespace std; void test (std ::function (int )>f) class Avoid bar( void ));//利用lambda表示式傳遞this和成員函式test (std ::bind(& A::foo, this ,std ::placeholders ::_1 ));//利用std::bind傳遞 }intm= 10;};int main() 4樓:stay 相容C語言的介面就要用C語言的方式來解決 typedef int( *pFunc )(int );void test (pFuncf) classA; A*g_pObjectOfA =NULL ;int foo( intx );class Aintm= 10;};int foo( intx) 5樓:rileyye #include struct Class ;void fun2 ();}; using member_fun_type =int (Class ::*)( int); void test (Class *ptr ,member_fun_type fun) void Class ::fun2 ()int main(); a.fun2 ();} /*輪子哥的意思應該是這個,不知對不對*/@vczh 6樓:張海容 班門弄斧一下吧。。不一定很對。 你的外部test函式,裡面要傳遞的函式指標型別,是形參為乙個int,而類的成員函式是隱藏的第乙個形參為this指標的,所以你傳進test函式會型別不匹配。所以你就要想辦法把你的要傳入的函式變為匹配的。可以用bind,lambda之類的手段把this指標給提前弄到你要傳入的成員函式,使其包裹後表現的只需要乙個int,就能滿足test的要求了 7樓:wfhstories 可能我沒說清楚這個問題,之所以想這樣呼叫,是因為我需要呼叫乙個庫的函式,那個函式就像這裡的test函式一樣沒有用std function。我需要把類成員函式當做callback傳進這個庫函式裡面去。想求乙個這樣的解決方案 燈火不滅 採用取成員函式指標的位址的方法,先把指向成員函式指標的指標強制轉化為別的型別,如unsigned 當然同樣可以通過此轉化後的指標經過相反的變換來呼叫成員函式。於是乎要轉化為void 的問題也隨之可解,如下示例 VS2003下編譯執行 class AbstractMethodvoid fun... zr scat 瀉藥先定義乙個函式指標 typedef void pfn void 再定義指向函式指標的指標 void print void pfn func print pfn ptr func 在c 11下,可以這麼偷懶獲得型別 1 include 23using namespace std 4... 暮無井見鈴 C 怎麼生成 4096 個函式?參考這裡的巨集,編譯時生成這些函式是可行的。C 的話用 index sequence 模板就行。 VeroFess 手機回答 我是這麼做的 shellcode 彙編引擎 mmap VirtulAlloc 是不太安全 我乙個寫殼的管他安不安全 gcc下 in...關於 c 成員函式指標應該如何寫出typedef?
C 中如何定義指向函式指標的指標?
C語言裡如何按需生成函式指標陣列?