第五章 泛化仿函式

2021-07-03 13:28:47 字數 2069 閱讀 5956

該章節有點類似於實現了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 ...