※ 引述《lovejomi (JOMI)》之铭言:
: Foo(ICallback* callback)
: : mCallback(callback){ assert(mCallback); }
: 被问说那为什么你mCallback不用reference 然后Foo就开成(ICallback&)就好
: 我不想这样改
: 但我没有强力的说法比较出哪一种比较好或是合理
: 我的看法
: 用ref, caller势必要*ptr 做dereference才能传进来
: 虽然说reference 可以当作non null去操作
: 但有心要传*null也不是不行.
: 开reference 给别人传,比起pointer更有机会caller不小心传入local variable
: 以上都可以用一句话“哪有人会这样写”来否定用pointer存.
: 而用reference 可以给人一种 必定要想办法生出一个物件才能呼叫的感觉...
: 实在想不到哪个时候 用reference
: 才是合理的写法.
: 反而我自己是很少看过member 用reference去存...
: 不知道大家在design上会有什么考量
: 谢谢
我整理一下你的文章
觉得应该将m_callback宣告为reference的理由
‧ 用reference可以让使用者明白一定要有物件作引数才可以
觉得应该将mp_callback宣告为pointer的理由
‧ 我不想写成reference
老实讲我觉得这种问题 没什么必要来搬救兵
有些团队文化就是要听大老的 有些团队以和为贵 有些团队奔放自由 有些团队会造神
这种问题 只是看你在哪种团队 然后做的东西给谁用而已
如果你的程式码是编译完变软件 给一般用户用 我觉得真的没差
如果你的程式码是给别人用的 那个assert其实意义也不大
很多assert根本就是写爽的 只是会跳视窗的TODO而已
所以在参数设计上刁难user 确实是有效果
但是认真讨论下去 真的没啥意义 就只是习惯问题而已
等等跳出第三个人来说:为什么不用std::function就好
那不是没完没了?
对呀 为什么你不用std::function就好?
作者:
sa12e3 2018-07-23 21:17:00...
也不一定啦 很多公司都喜欢自己重刻 我一年内看过四种string
我有自己刻过string,后来又回去用std::string了因为后来觉得为了扩增功能而去建立新的字串容器很笨而且其他人应该也不喜欢看到这么多变种
作者:
Sex5F (HTC)
2018-07-24 16:07:00因为他觉得方便啊,看不懂是你的问题开案的第一手RD最大一堆规则只用到一次..两次..很常见code切成黑盒子有时真的不太必要就是了..反而是菜鸟才干的...我是回string
作者: RadiationXen (Xen) 2018-07-27 19:43:00
推一下std::function
作者: AstralBrain 2018-07-28 14:27:00
std::function里面包的东西要可copy结果你还是会遇到要包指标还是包reference_wrapper的问题
其实就是因为std::string太弱才会有那么多重刻 不过..老实讲配boost::string应该够满足绝大多数需求了在没满足的就用外挂函数挂上去就好