c++可以根據傳入的函式指標,獲取自己需要的引數型別,然後根據引數源中獲取需要的引數,這裡我用tuple作為演示,不過,只要可以根據序號,或者順序方式等獲取實參,都可以使用類似的方式實現:
先給出乙個輔助函式:
/** 獲取第n個型別
*/template
struct
select
;template
struct
select
: public
select
;
下面給出實際的實現函式:
#include #include"vs-help.h
"class
tuplefunc
//函式的實際構造過程
template void makefuncandparams(ret(*func)(args...), paramssource¶msource)
//實際呼叫
void
invoke()
private
:
//實際呼叫初始化
template void makefuncandparamsimpl(func&& func, select, paramssource& paramsource, params&&...args)
//結束呼叫
template void makefuncandparamsimpl(func&& func, select
<>, paramsource& paramsource, params&&... args);}
private
: std::function
m_func;
};
下面是測試用例:
void print(int x, std::stringy)int
main()
; tuplefunc func;
func.makefuncandparams(&print, p);
func.invoke();
return0;
}
通過使用lambda表示式,我們可以很方便的構建乙個我們呼叫時需要的函式,而模板的存在,可以使我們在構建乙個lambda表示式的時候,可以動態化,使某些情況下,更加靈活的構建各類處理函式map等。上面只是簡單的演示,具體場景下,需要進行一定的修改。
C 指向類成員函式的指標詳細解析
首先 函式指標是指向一組同型別的函式的指標 而類成員函式我們也可以相似的認為,它是指向同類中同一組型別的成員函式的指標,當然這裡的成員函式更準確的講應該是指非靜態的成員函式。前者是直接指向函式位址的,而後者我們從字面上也可以知道 它肯定是跟類和物件有著關係的。typedef int p int,in...
C 委託所蘊含的函式指標概念詳細解析
原則 1 函式指標,實際上是函式編碼後的指令在記憶體中的首程式設計客棧位址,在c c中,這個位址可以用函式名直接使用 乙個函式呼叫另乙個函式的時候,就可以把被呼叫函式以函式指標的形式作為引數傳入 2 函式callback使用的技術就是函式指標 函式就好像是乙個中斷處理函式,系統在符合你設定的條件時自...
C 學習第二天 根據彙編來理解物件導向指標的本質
問題 指標是如何對物件導向裡的物件進行操作的呢 下面舉個例子 struct person int main 以下是通過c 語言反彙編的得到的組合語言 mov dword ptr ebp 14h 0ah mov dword ptr ebp 10h 1 mov dword ptr ebp 0ch 2 不...