該章節有點類似於實現了function和bind操作
functor.h的實現
#pragma once
#include "functorimpl.h"
#include "functorhandler.h"
// r即返回值,tlist即引數列表
template//預設不帶引數
class cfunctor
;cfunctor(const cfunctor&){};
cfunctor& operator = (const cfunctor&);
~cfunctor(){};
explicit cfunctor(impl* pimpl);
// 此處不能用typeat,因為typelist可能只有1個甚至0個物件,如果使用typeat會編譯不通過的。
// typedef typename typeat::result param1;
//typedef typename typeat::result param2;
typedef typename typeatnonstrict::result param1;
typedef typename typeatnonstrict::result param2;
// 仿函式
r operator()()
r operator ()(param1 p1)
r operator ()(param1 p1, param2 p2)
template
cfunctor(const fun& fun)
: pimpl_(new cfunctorhandler(fun))
private:
impl* pimpl_;
};functorhandler.h的實現
#pragma once
#include "functorimpl.h"
template
class cfunctorhandler: public cfunctorimpl
resulttype operator()()
resulttype operator()(typename parentfunctor::param1 p1)
resulttype operator()(typename parentfunctor::param1 p1, typename parentfunctor::param2 p2)
private:
fun fun_;
};functorimpl.h的實現,利用了前面的typelist
#pragma once
#include "../typelists/typelist.h"
template
class cfunctorimpl;
template
class cfunctorimpl
};template
class cfunctorimpl
};template
class cfunctorimpl
};簡單的乙個測試
struct test2
成員函式的仿函式如何實現呢?
先來看下神秘的成員函式
class ctestfunctor
;void ctestfunctor::test()
// 仿函式
resulttype operator()()
resulttype operator()(typename parentfunctor::param1 p1)
resulttype operator()(typename parentfunctor::param1 p1, typename parentfunctor::param2 p2)
private:
pointertoobj pobj_;
pointertomemfn pmemfn_;
};測試**,test介面中最後一行
void ctestfunctor::test()
bind的實現沒有研究,考慮到c++ 11和boost均對bind實現的較好了,沒有深入再看下去了
第五章 函式
第五章 函式 1 函式的定義 shell函式定義可以放在 bash profile 檔案中,也可以在使用該函式的指令碼中,還可以在命令列中 通過 source 或 執行bash profile檔案,使修改能夠立即生效 function 函式名 declare f 顯示定義的函式清單 export f...
第五章 函式
在lua中,函式是對語句和表示式進行抽象的主要機制。即使呼叫函式時沒有引數,也必須要寫出一對空括號。一種特殊的例外情況 乙個函式若只有乙個引數,且此引數是乙個字面字串或table構造式,那麼圓括號別是可有可無的。print hello world dofile test.lua print a mu...
python第五章 Python學習(第五章)
記錄所有的名片字典 card list defshow menu 顯示資訊 print 50 print 歡迎使用 名片管理系統 v1.0 print print 1.新增名片 print 2.顯示全部 print 3.搜尋名片 print print 0.退出系統 print 50 defnew ...