※ 引述《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就好?