#include <iostream>
#include <functional>
using namespace std;
void MyFunc(int i, char j) {
cout << "MyFunc function called, a int arg:" << i << " ,a char arg:" << j << endl;
}
template<class F, class... Args>
void callback(F func, Args... args) {
cout << "callback function called" << endl;
function<void()> arr[5];
// function<void()>類型包裝了返回值為void、參數(shù)列表為空的函數(shù)
arr[0] = bind(func, args...);
// bind()把函數(shù)和參數(shù)綁定起來,形成一個(gè)仿函數(shù):返回值為void、參數(shù)列表為空void void Object.operator() ();
// 如果是成員函數(shù),還能把成員函數(shù)對(duì)象和成員函數(shù)綁定起來,再和參數(shù)綁定起來
// 這樣剛好就能被function<void()>包裝存儲(chǔ)起來
arr[0]();
return;
}
class MyClass {
public:
void m_func(int i) {
cout << "MyClass::m_func function called, a int arg:" << i << endl;
}
};
int main() {
callback(MyFunc, 555, 'v');
MyClass mc;
callback(&MyClass::m_func,&mc,100);
callback([](int i){cout << "lambda function called, a int arg:" << i << endl; }, 666);
return 0;
}
```cpp
C++可調(diào)用對(duì)象包裝器和可變參數(shù)模板結(jié)合實(shí)現(xiàn)任意函數(shù)調(diào)用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- usingnamespacestd; class Foo { public: template<typename....
- 編寫一個(gè)函數(shù),他可以接受任意數(shù)量參數(shù),參數(shù)類型只需要是cout能夠顯示的即可
- 可變參數(shù)模板 原文鏈接: http://blog.csdn.net/xiaohu2022/article/deta...
- 簡(jiǎn)述 可變參數(shù)模板(Variadic Template)是C++11引入的新特性,讓模板編程更容易,且在運(yùn)行時(shí)更少...