作者:
Clangpp (Clang++)
2016-09-04 19:13:38事情是這樣的,小弟目前在工作上想要用
template 來實作strategy (因為自己在研究template的一些玩法,所以想要在工作上嘗試
順便利用它來避掉用virtual的成本)
下面有一個物件叫做verifier (驗證者) 是一個interface
底下會有好幾個他的division class 像是密碼驗證,智慧卡驗證,或是指紋驗證
然後各自的驗證再去實作他自己的東西
那其中有個function叫verify (密碼驗證就是丟密碼,智慧卡驗證要丟他的一些data
struct,而指紋驗證是要丟指紋的影像byte)
由於參數會不同,所以template有沒有什麼樣的手段可以讓他做到參數可變化??
特化?? 還是說我都統一丟void *進去 各自實作的function再去解讀??
以上問題有請解答 謝謝
作者:
Clangpp (Clang++)
2016-09-04 19:36:00我再想typelist能不能用在我那個verify的function上??
那篇是舉例 重點不是typelist 而是讓界面和實作分離
作者:
Clangpp (Clang++)
2016-09-04 19:41: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
我是不曉得要做到怎樣 我想到的是包起來之後用for_each(beg,end,[](auto var){var.fun(var.data)})自動把每個function帶入每個變數 稱不上strategy
用template class解決,template就是用來參數可變我不太懂你的問題是出在哪?你是想要同一個interface的同個function吃不同type?這就困難了,照理說應該是根據不同type宣告不同interf
就是我的verify<InterfaceA,InputA>();verify<InterfaceB,InputB>(); 依此類推資料結構用std::list<boost::any>去包
作者:
Clangpp (Clang++)
2016-09-04 21:43:00只是問問看而已 看有沒有辦法達到這樣
作者:
holydc (のヮの)
2016-09-04 22:09:00作者:
Clangpp (Clang++)
2016-09-04 22:13:00感謝holydc 這樣應該是比較符合我目前需求的不過原來可以 class...這樣用啊...
作者:
holydc (のヮの)
2016-09-04 23:31:00c++11 variadic template
作者:
BlazarArc (Midnight Sun)
2016-09-05 09:54:00會很不常用嗎...偶爾寫需要forward的function會用到我沒在用TMP的還是有機會會用到XD
記憶體for each後又有一個不常用的variadic 嗎XD 用template 蠻常用的吧 stl裡也有
我是從從學到到現在還沒用過耶, generic lib 當然會很常用, 但一般 programming 我想不到應該用在哪要嘛就是 BlazarArc 說的 forward function
作者:
CoNsTaR ((const *))
2016-09-07 13:28:00TMP 不算是一般 programming 嗎
哈哈隨便我不爭論 lol 至少工作上我找不到使用時機就是