- 主题:设计标准库时间类的人脑子里到底怎么想的?
duration_cast是为了能在A、B之间按固定比例做任意转换,如果用A.milli_seconds()方法的办法,那需要加N种方法(如果以后扩展出天、年等单位,那还需要加方法),每种方法内部有N种模板匹配或者判断。还要考虑精度尽可能不损失。
A(时、分、秒、毫秒、微秒、纳秒),6种
B(时、分、秒、毫秒、微秒、纳秒),6种
那就不如std::duration_cast<B>(A)这一个万能接口来搞定了。
如果需要,可以在这个万能接口基础上简单封一个懒人接口to_milli_seconds()这种。
通常设计这些东西的人的抽象能力是超过普通码农的
但是如果他们搞的东西超出了自己原有的认知,或者让自己觉得不舒服,那需要想想是为什么,是不是自己该学习新东西了
这些人是人不是神,也可能有错(或者是因为要背历史的包袱),但比自己有错的概率是小的
【 在 finlab 的大作中提到: 】
: duration_cast<duration<double, milli>>(endTime - startTime).count())
: 直接加个方法:(endTime - startTime).milli_seconds() 这样不好吗?
: 又不会弄混单位,写起来也简单。
: ...................
--
修改:z16166 FROM 221.218.163.*
FROM 221.218.163.*
所以你顶楼的代码为什么要调用duration_cast然后说这个封装脑子有问题呢?
为什么不自己除一下呢?
【 在 finlab 的大作中提到: 】
: 这个简单的换算,为啥非要封装吗? 调用者自己做个除法有啥问题?
:
--
FROM 221.218.163.*
写库的人,要考虑各种适配情况,还得优雅顺畅
而你看到的、用到的只是它所考虑的N种适配情况中的一种,然后你就喷它没为你这一种情况考虑
你可以给你自己常用的那种,搞一个懒人封装啊
【 在 finlab 的大作中提到: 】
: 还有, 做成方法调用,自动完成会很方便, 用cast,都要自己手敲,花时间要多很多
:
--
FROM 221.218.163.*
这又是对硬件(时钟)的抽象了,要适配各种精度的时钟
但是在调用者不需要的情况下,不要进行数值转换,保持原样,因为调用者不需要的操作,那就是额外的开销。
这些是我临时想出来解释的,不一定对,看看就行,哈哈
【 在 finlab 的大作中提到: 】
: 因为他们提供的count()看不出什么单位,我还要经常查一下
:
--
FROM 221.218.163.*
自己做除法,是error-prone的,人对数字把控的可靠度,远低于对符号的把控。
那个固定比例数值不需要调用者每次都手写。
我有时还会把milli second和micro second搞混,因为不是英语母语的人
【 在 finlab 的大作中提到: 】
: 这个简单的换算,为啥非要封装吗? 调用者自己做个除法有啥问题?
:
--
FROM 221.218.163.*
你想想码农为啥不用机器码写代码,而是要用汇编语言作为助记符
【 在 finlab 的大作中提到: 】
: 但是写零不容易搞混啊,数字可以加分隔符, 1'000'000
: 多清楚
: 用milli这些,还要加个头文件, 我还得知道milli到底是个啥
: ...................
--
FROM 221.218.163.*
这不是抬杠,而是再次举例说明“符号比数字更容易把控”这个原则
不举极端的例子,可能对有些人没有触动。
鲁迅说,悲剧是把人生有价值的东西毁灭给人看。所以悲剧就是极端的例子,才有撼动人心的力量。哈哈,扯远了
【 在 finlab 的大作中提到: 】
: 这样极端化,就是抬杠了
:
--
修改:z16166 FROM 221.218.163.*
FROM 221.218.163.*
count()的含义是tick数
https://en.cppreference.com/w/cpp/chrono/duration/count
https://cplusplus.com/reference/chrono/duration/count/
【 在 finlab 的大作中提到: 】
: 因为他们提供的count()看不出什么单位,我还要经常查一下
:
--
FROM 221.218.163.*