[問題] template 做 strategy pattern的問題

作者: Clangpp (Clang++)   2016-09-04 19:13:38
事情是這樣的,小弟目前在工作上想要用
template 來實作strategy (因為自己在研究template的一些玩法,所以想要在工作上嘗試
順便利用它來避掉用virtual的成本)
下面有一個物件叫做verifier (驗證者) 是一個interface
底下會有好幾個他的division class 像是密碼驗證,智慧卡驗證,或是指紋驗證
然後各自的驗證再去實作他自己的東西
那其中有個function叫verify (密碼驗證就是丟密碼,智慧卡驗證要丟他的一些data
struct,而指紋驗證是要丟指紋的影像byte)
由於參數會不同,所以template有沒有什麼樣的手段可以讓他做到參數可變化??
特化?? 還是說我都統一丟void *進去 各自實作的function再去解讀??
以上問題有請解答 謝謝
作者: Sidney0503 (Sidney0503)   2016-09-04 19:32:00
loki的概念?簡單說template第一class為介面 第二class實作#14H4JFTn (C_and_CPP)
作者: Clangpp (Clang++)   2016-09-04 19:36:00
我再想typelist能不能用在我那個verify的function上??
作者: Sidney0503 (Sidney0503)   2016-09-04 19:41:00
那篇是舉例 重點不是typelist 而是讓界面和實作分離
作者: Clangpp (Clang++)   2016-09-04 19:41:00
喔喔 感謝樓上 看起來跟我理解的一樣
作者: Sidney0503 (Sidney0503)   2016-09-04 19:46:00
如果是C++11就多用std::placeholders和std::bindC++14就多用lambda expression其中一個想到的方法和void*蠻像 pointer to function另一個想法Template<class Int , class Imp >bool verify(){return Int.Verify(Imp data);}
作者: Clangpp (Clang++)   2016-09-04 21:00:00
喔喔喔 好像還可以用 std::function
作者: Sidney0503 (Sidney0503)   2016-09-04 21:21:00
我是不曉得要做到怎樣 我想到的是包起來之後用for_each(beg,end,[](auto var){var.fun(var.data)})自動把每個function帶入每個變數 稱不上strategy
作者: hn12404988 (Willy)   2016-09-04 21:25:00
用template class解決,template就是用來參數可變我不太懂你的問題是出在哪?你是想要同一個interface的同個function吃不同type?這就困難了,照理說應該是根據不同type宣告不同interf
作者: Sidney0503 (Sidney0503)   2016-09-04 21:36:00
就是我的verify<InterfaceA,InputA>();verify<InterfaceB,InputB>(); 依此類推資料結構用std::list<boost::any>去包
作者: Clangpp (Clang++)   2016-09-04 21:43:00
只是問問看而已 看有沒有辦法達到這樣
作者: Sidney0503 (Sidney0503)   2016-09-04 21:50:00
http://ideone.com/TQdNuX 我想到的兩種方法大概的想法是這樣 只是虛擬碼保證不能用XD對我而言喜歡方法二
作者: holydc (のヮの)   2016-09-04 22:09:00
不懂,不就是這樣嗎 http://ideone.com/3FSshN
作者: Clangpp (Clang++)   2016-09-04 22:13:00
感謝holydc 這樣應該是比較符合我目前需求的不過原來可以 class...這樣用啊...
作者: holydc (のヮの)   2016-09-04 23:31:00
c++11 variadic template
作者: Ebergies (火神)   2016-09-05 09:49:00
這個平常太少用了, 不知道是正常的 lol
作者: BlazarArc (Midnight Sun)   2016-09-05 09:54:00
會很不常用嗎...偶爾寫需要forward的function會用到我沒在用TMP的還是有機會會用到XD
作者: steve1012 (steve)   2016-09-05 22:19:00
記憶體for each後又有一個不常用的variadic 嗎XD 用template 蠻常用的吧 stl裡也有
作者: Ebergies (火神)   2016-09-07 12:18:00
我是從從學到到現在還沒用過耶, generic lib 當然會很常用, 但一般 programming 我想不到應該用在哪要嘛就是 BlazarArc 說的 forward function
作者: CoNsTaR ((const *))   2016-09-07 13:28:00
TMP 不算是一般 programming 嗎
作者: Ebergies (火神)   2016-09-07 14:41:00
哈哈隨便我不爭論 lol 至少工作上我找不到使用時機就是
作者: BlazarArc (Midnight Sun)   2016-09-08 11:44:00
我還有用過把function parameter轉string list也可以http://ideone.com/UjPPDc

Links booklink

Contact Us: admin [ a t ] ucptt.com