- 主题:c++太复杂了,我承认这几行代码我一辈子写不出来
模板里的class... Args
这里的三点是啥意思?
【 在 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 36.163.156.*
我的经验是,现代c++还是需要进行定期培训的,培训的时候最重要的就是强调
编译时, cache hit rate
每周培训一次,平时从维护代码开始,基本3个月,能练出一个可以按现代c++做代码重构的程序员
【 在 buildtolast 的大作中提到: 】
: 要看懂已经很不容易了,要写出/修改/维护,简直是不可能。。。
: 语言是拿来用的工具,在工具本身花费太多时间,有点得不偿失,本末倒置。。。
: 现在的孩子,能用好c++,要到2030年了,那时候世界不知道是什么样子了。
: ...................
--
FROM 115.193.181.*
放弃java,拥抱c++ + python + AI coder
【 在 babam 的大作中提到: 】
: 不太想看这种代码。太多新的语法糖了 看不明白
: 让ai写了个java的版本 我觉得好懂点
: import java.util.concurrent.*;
: ...................
--
FROM 115.193.181.*
问AI也行的
可变参数的模板。也就是模板的参数的个数是任意的。
这样,任意函数都可以作为task的实际执行函数。
【 在 wanllow 的大作中提到: 】
: 模板里的class... Args
: 这里的三点是啥意思?
--
FROM 111.199.144.*
3楼那个例子似乎是很难绕开std::make_index_sequence的
原因是:
std::array的递归拼接要用到默认构造或者std::make_index_sequence,
而std::pair<frozen::wstring, frozen::wstring>没有默认构造
【 在 ziqin 的大作中提到: 】
: c++ 20可以
: 整个标准是从无到有,从纯数学构架慢慢给各个传统函数和类添加constexpr
: 模板库是不是优雅,不要看库的代码,要看使用的时候用法。
: ...................
--
FROM 111.199.144.*
我的意思是,c++20以后,constexpr/consteval系列功能已经基本完备了,很多第三方的轮子已经不需要了
像他那个frozen::unorderded_map直接可以用constexpr的for来代替了,甚至constexpr for还能early return比用index_sequence或者folding expression做查找还快,是best practice
标准库里有的东西,还是尽量用标准库
【 在 z16166 的大作中提到: 】
: 3楼那个例子似乎是很难绕开std::make_index_sequence的
: 原因是:
: std::array的递归拼接要用到默认构造或者std::make_index_sequence,
: ...................
--
FROM 115.193.181.*
编译时初始化array,如果图敲字少,的确是index_sequence最简洁
但是从维护性或者代码友好度来看,还是传统的c的,先申明array,再用for一个个填进去。
c++20的for是constexpr了,所以生产里建议用第二种,而且第二种的灵活性也更高
【 在 z16166 的大作中提到: 】
: 3楼那个例子似乎是很难绕开std::make_index_sequence的
: 原因是:
: std::array的递归拼接要用到默认构造或者std::make_index_sequence,
: ...................
--
修改:ziqin FROM 115.193.181.*
FROM 115.193.181.*
模板只是简化了代码重复量,编译后与写多个同样功能函数是一样的,类似同样名称函数的重载机制,根据不同的变量类型生成不同的多个函数。可以自己写了代码反汇编验证,网上也有讲。
【 在 z16166 的大作中提到: 】
: 楼主的那代码,是咋看出来在编译后不是精简的呢?
: C++搞的模板这种元编程的东西,就是为了方便在编译期做各种运算/推导/匹配/优化。
: 当然,Rust等采用了别的元编程技法。
: ...................
--
修改:god4 FROM 221.218.142.*
FROM 221.218.142.*
鄙视所有复杂用法,C++要做减法用,能简单就简单
【 在 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 111.48.134.*
挺酷的
真的需要shared_ptr吗 这个场景,生命期复杂到完全HOLD不住?
【 在 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 111.221.224.*