C_and_CPP 板


LINE

:



※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 114.32.15.163 : → adrianshum:我觉得这样只不过是把那你口中那十个 functor的 code 10/05 12:04 : → adrianshum:用另一种形式写出来吧了, 没省多少东西... 10/05 12:05 : → minazukimaya:十个functor变一个functor总比写十遍好吧.. 10/05 12:39 : → minazukimaya:确实,如果你十个都有用到 compiler真的会具现化 10/05 12:39 : → minazukimaya:十个functor出来 但是写一个总比写十个简单.. 10/05 12:40 : → minazukimaya:template的精义就在於叫compiler帮你写code啊XDD 10/05 12:41 : → adrianshum:重点是没有省多少 code 呀... 所谓重覆的部份也只是 10/05 16:10 : → adrianshum:class XXX { public boolean operator < (const Y&){}} 10/05 16:11 : → minazukimaya:好处多多啊 1.十行变一行 2.避免duplicate code产生 10/05 16:27 : → minazukimaya:3.如果你宣告十个functor compile就会生十个给你 10/05 16:28 : → minazukimaya:但是template是你真的有用到才会产生 10/05 16:28 : 推 Fenikso:template配什麽enum.. 要放也是放member function pointer 10/05 16:30 : → minazukimaya:如果你真的写十个functor出来 以後要是functor功能 10/05 16:31 : → minazukimaya:要改 一口气要改十个地方耶XD 10/05 16:31 : 推 Fenikso:你这样跟写十个不同名字的getter有什麽不同 10/05 16:36 : → minazukimaya:是他们教授说要用template完成耶XD 啊不然我也知道 10/05 16:37 : → minazukimaya:用boost::bind一个functor都不用写 10/05 16:38 : → minazukimaya:另外,和前述一样的道理 你写十个getter就是十个都 10/05 16:41 : → minazukimaya:会存在 但是template member function是需要的时侯 10/05 16:41 : → minazukimaya:才会产生出来的 10/05 16:41 : 推 Fenikso:comparator写成template就好啦 getter写成template一点用 10/05 16:42 : → Fenikso:都没有 10/05 16:42 : → minazukimaya:好处是function call成本比较低啊 当然缺点就是灵活 10/05 16:50 : → minazukimaya:度比较差 10/05 16:50 : → adrianshum:最大问题是把本来的class 污染了, 用 external functor 10/05 16:52 : → adrianshum:其中一个原因就是想改 sorting criteria 的时候不需改 10/05 16:52 : → adrianshum:model, 但这做法, 每加一个就要改一次 model 10/05 16:53 加上getXXX()的做法也是每加一次要改一次model啊.. 同样都是污染原本的class 为什麽你为认为加十个getter比加一个template function污染得少呢? 要提取class其中的private成员 本来就势必要在class里面加东西 两者的差别只在你加的是member function还是template member function而已 : → adrianshum:根本和写十个 compare_by_Xxx() compare_by_Yyy() 无异 10/05 16:53 class LessThanByXXX { public: bool operator() (GNF& lhs,GNF& rhs) { return lhs.getXXX()<rhs.getXXX();} }; 这样写十个 和 template <GNF::SortBy T> class LessThanBy { public: bool operator() (GNF& lhs,GNF& rhs) { return lhs.getAttr<T>() < rhs.getAttr<T> ();} } 写十个前者到底哪里比较好.. 除了增加code的长度和降低维护性之外.. 写十个functor然後每个functor只差9个字元 这样真的比较好吗 : → adrianshum:另, functor 的功能要改, 这个根本不成立吧. 到头来 10/05 16:5 : → adrianshum:省到的就是我说的那两句, 换来的是 model 被污染, code 10/05 16:5 : → adrianshum:变得难理解. 值得吗? 还不要说要是要compare两个field 10/05 16:5 : → adrianshum:的话, 这做法也行不通 10/05 16:5 template <GNF::SortyBy T, GNF::SortyBy T> 不就好了吗.. 如果你嫌麻烦不想写还可以加个预设引数呢 这种需求不写成template 难道要写10*9 = 90个LessThanByXXX_AND_YYY()吗... --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.15.163 ※ 编辑: minazukimaya 来自: 114.32.15.163 (10/05 17:31)







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP