C 如何將成員函式指標作為普通函式的引數傳遞?

時間 2021-05-13 03:19:54

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傳進這個庫函式裡面去。想求乙個這樣的解決方案

關於 c 成員函式指標應該如何寫出typedef?

燈火不滅 採用取成員函式指標的位址的方法,先把指向成員函式指標的指標強制轉化為別的型別,如unsigned 當然同樣可以通過此轉化後的指標經過相反的變換來呼叫成員函式。於是乎要轉化為void 的問題也隨之可解,如下示例 VS2003下編譯執行 class AbstractMethodvoid fun...

C 中如何定義指向函式指標的指標?

zr scat 瀉藥先定義乙個函式指標 typedef void pfn void 再定義指向函式指標的指標 void print void pfn func print pfn ptr func 在c 11下,可以這麼偷懶獲得型別 1 include 23using namespace std 4...

C語言裡如何按需生成函式指標陣列?

暮無井見鈴 C 怎麼生成 4096 個函式?參考這裡的巨集,編譯時生成這些函式是可行的。C 的話用 index sequence 模板就行。 VeroFess 手機回答 我是這麼做的 shellcode 彙編引擎 mmap VirtulAlloc 是不太安全 我乙個寫殼的管他安不安全 gcc下 in...