[问题] 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