- 主题:c++太复杂了,我承认这几行代码我一辈子写不出来
会这些能赚到一个亿吗?
【 在 z16166 的大作中提到: 】
: 很实用的
: 编译期的变参函数,也很常见。
: 除了线程池/回调,给脚本引擎导出native函数接口也能用到。
: ...................
--
FROM 183.30.222.*
赚不到一个亿,赚个几万几十万没啥问题吧,哈哈
但是躺在那里一边刷手机一边说“熟悉现代C++太难了,我没时间”,会连一个亿的一个子儿都未必能赚到啊
【 在 Waerden 的大作中提到: 】
: 会这些能赚到一个亿吗?
:
--
FROM 111.199.144.*
工具发明出来,是为了在必需的时候用,而不是说能用尽量用。
比如人类发明了枪,但是枪的使用是被严格限制的。你不服气,说不应该限制,因为去公园玩,常常看到有人带着狗,我怕狗,我要是身上有把枪就不怕了。别人反驳你说,你怕狗也不一定要配枪啊,棍子、刀子、或者远离狗都行。你说不行,那些都不如枪好使。
如果限定场景:你和狗对抗,手持什么武器,你会最舒服?毫无疑问,枪最好。
但现实是不限定场景,然后枪随便配戴,那世界就糟糕透了;比如两个人发生矛盾了,本来就是吵个架影响半天心情,结果现在可以上头一枪把人崩了,搭进去两条命。不要在这个时候辩解说:这不怪枪,也不怪允许随便配枪的管理策略,应该怪持枪的人不会用枪。枪放开了,就是会导致这么多问题。
----
C++的许多新特性新工具,当然是有用的;但还是在你遇到常规方法难以解决的问题时,再去研究这些新特性吧,不要觉得他有意思,觉得自己学会了,就到处使用它。
一个枪支泛滥的国家,我们大部分人是不敢去的,太危险了
一个喜欢玩弄十八般花样的程序员,大部分人也是不敢跟他在一个项目组的,太累了
【 在 z16166 的大作中提到: 】
: 不如把2030改成3030,那样更不用学啥东西了,躺平就能当亿万富翁了
: 而且你的另一个说法也不对,俗云“工欲善其事必先利其器”,你要上阵杀敌,不把自己手里的枪pao的原理和实操搞得滚瓜烂熟?那不等于是去送人头吗
: 而且楼上有一位还在说C++要大力做好各种工具呢
: ...................
--
修改:ForSolitude FROM 115.196.69.*
FROM 115.196.69.*
C++引入变参模板就是用来解决“任意个数的参数的匹配推导”、“任意函数的匹配推导”之类问题的。
这个特性不是一开始就有的,而是后来发现没有这个东西,有一部分问题就不好抽象、描述,要用hack/猥琐的方法去实现。跟C/C++一开始没有__VA_ARGS__宏,导致写个支持任意参数的日志函数都要hack,是一样的。
而线程池的任务队列,正好就是它的使用场景之一:可以在编译期检查放到队列里的任意函数的signature。
从这个角度来说,楼主那个代码就是:C++的变参模板这个特性是用在最合适的场合,而且起到了预期的作用。
这就叫“恰如其分”,而不是“炫技”。
至于是否“晦涩”,完全看说这话的人的知识基础。
没学过对应预备知识的人,比如我,光看黎曼猜想的文字表述都觉得“晦涩”,更别提进一步的了。
【 在 ForSolitude 的大作中提到: 】
: 工具发明出来,是为了在必需的时候用,而不是说能用尽量用。
: 比如人类发明了枪,但是枪的使用是被严格限制的。你不服气,说不应该限制,因为去公园玩,常常看到有人带着狗,我怕狗,我要是身上有把枪就不怕了。别人反驳你说,你怕狗也不一定要配枪啊,棍子、刀子、或者远离狗都行。你说不行,那些都不如枪好使。
: 如果限定场景:你和狗对抗,手持什么武器,你会最舒服?毫无疑问,枪最好。
: ...................
--
FROM 111.199.144.*
谢谢。不过解释下,我在讨论问题时,一般不是为了评判,而是想应该怎么做。
所以,我可能关注的重点不是“那个代码这样写好不好”,我觉得这没法评判,缺乏太多信息,各种观点都能解释出道理。
我更多是针对lz题目所表达的,说“C++太复杂了……一辈子写不出来”,这话可能给人一种感觉:C++太复杂了,学习使用它太难,是不是还是使用其他语言更好。那我会觉得,C++是复杂,可是我们也不是要学会使用所有的C++工具啊,甚至很多工具能不用尽量别用;如果真到必须使用的场合,在座的钻研一下,我不信谁写不出来。但我觉得没必要提前去钻研这些工具,如果学了又在自己工作中很少使用,不但没意义反而可能有害处,因为你可能会积极去想能不能利用他,这对你的项目组可能带来麻烦。
【 在 z16166 的大作中提到: 】
: C++引入变参模板就是用来解决“任意个数的参数的匹配推导”、“任意函数的匹配推导”之类问题的。
: 这个特性不是一开始就有的,而是后来发现没有这个东西,有一部分问题就不好抽象、描述,要用hack/猥琐的方法去实现。跟C/C++一开始没有__VA_ARGS__宏,导致写个支持任意参数的日志函数都要hack,是一样的。
: 而线程池的任务队列,正好就是它的使用场景之一:可以在编译期检查放到队列里的任意函数的signature。
: ...................
--
修改:ForSolitude FROM 115.196.69.*
FROM 115.196.69.*
特意看了,层主的全部评论,有理有据,在用心回复。
手动点赞
【 在 z16166 的大作中提到: 】
: C++引入变参模板就是用来解决“任意个数的参数的匹配推导”、“任意函数的匹配推导”之类问题的。
: 这个特性不是一开始就有的,而是后来发现没有这个东西,有一部分问题就不好抽象、描述,要用hack/猥琐的方法去实现。跟C/C++一开始没有__VA_ARGS__宏,导致写个支持任意参数的日志函数都要hack,是一样的。
: 而线程池的任务队列,正好就是它的使用场景之一:可以在编译期检查放到队列里的任意函数的signature。
: ...................
--
FROM 36.21.226.*
谢谢支持哈
【 在 TerryW 的大作中提到: 】
: 特意看了,层主的全部评论,有理有据,在用心回复。
: 手动点赞
:
--
FROM 111.199.144.*
不可能看懂,如果c++11引入的新东西没学过。。
大模型为速成开辟了新路径
【 在 buildtolast 的大作中提到: 】
: template <class F, class... Args>
: auto ThreadPool::Enqueue(F &&f, Args &&...args) -> std::future<typename std::result_of<F(Args...)>::type> {
: using return_type = typename std::result_of<F(Args...)>::type;
: auto task =
: std::make_shared<std::packaged_task<return_type()>>(std::bind(std::forward<F>(f), std::forward<Args>(args)...));
: 模板+变长参数+异步+右值引用+转发+智能推导。。。
--
FROM 123.125.11.*
楼教主能写出来吗
【 在 buildtolast 的大作中提到: 】
: template <class F, class... Args>
: auto ThreadPool::Enqueue(F &&f, Args &&...args) -> std::future<typename std::result_of<F(Args...)>::type> {
: using return_type = typename std::result_of<F(Args...)>::type;
: auto task =
: std::make_shared<std::packaged_task<return_type()>>(std::bind(std::forward<F>(f), std::forward<Args>(args)...));
:
:
: 模板+变长参数+异步+右值引用+转发+智能推导。。。
发自「快看水母 于 iPhone 12 Pro Max」
--
FROM 120.195.155.*
模板编程是另外一种语言了,需要专门学习...
【 在 buildtolast 的大作中提到: 】
: template <class F, class... Args>
: auto ThreadPool::Enqueue(F &&f, Args &&...args) -> std::future<typename std::result_of<F(Args...)>::type> {
: using return_type = typename std::result_of<F(Args...)>::type;
: ...................
--
FROM 114.118.31.*