- 主题:c++太复杂了,我承认这几行代码我一辈子写不出来
c++ 20可以
整个标准是从无到有,从纯数学构架慢慢给各个传统函数和类添加constexpr
模板库是不是优雅,不要看库的代码,要看使用的时候用法。
项目底层用模板库,其他业务逻辑不要用,就算用也必须是anonymous namespace里的local helper函数
只要有那么几个底层的库作者能写就可以了
【 在 buildtolast 的大作中提到: 】
: 问一下,你的这个lambda表达式和index_sequense是必需的吗?不能用普通的for循环实现吗?感觉有点炫技的成分。
:
--
FROM 115.193.181.*
更elegant或者现代的写法应该是:
template <class handler_t>
auto Enqueue(handler_t&& handler)-> std::future<decltype(handler())>
{
using return_type = decltype(handler());
std::unique_lock<std::mutex> lock(queue_mutex);
tasks.emplace(std::packaged_task<return_type>([handler= std::forward<handler_t>(handler)]
{ return handler(); }));
auto res = task.back().get_future();
condition.notify_one( );
return res;
}
这回简单明了了吧。user应该在Enqueue()一个lambda进来,这才是现代c++的用法
【 在 jjjrrrbbb 的大作中提到: 】
: GPT5给了个更现代的写法,替换了不再使用的一些废弃方式。我也不知道写的咋样,没细看
: class ThreadPool {
: public:
: ...................
--
FROM 115.193.181.*
在这个基础上,如果面对的user不太行的,可以把handler_t的concept constrain加上去,变成
template<class handler_t>
concept as_task = requires(handler_t f)
{
f();
}
template <as_task handler_t>
.....
七七八八多这么代码,无非就是让user一旦用错在编译时就能报错。另外,在copilot的加持下,这些代码看起来很多,但是事实上大多数情况,你只需要写 //....的注释,很多体力活copilot自动补全
--
FROM 115.193.181.*
我的经验是,现代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.*
我的意思是,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.*
或许可能是脑子不够用?
【 在 sujkvato 的大作中提到: 】
: 不能改变C++现在走邪路滑翔拉基的事实。。。
: 玩这些根本不是在用语言去解决问题,而是制造屎山。方向错了,越努力越狗屎
: 现在的C++让人恶心,多看一眼都减寿,更别谈学这些毫无意义还稀奇古怪的特性了
: ...................
--
FROM 115.193.165.*
同鸡讲鸭
我们到底是在讨论语言问题还是在讨论项目组织问题?
CI/CD服务器难道64G内存都没有?你们没有上分布式编译?你们模块划分deubg没做?3万行在一个文件里?项目完全c++,不分底层库和业务流?三万行的底层库模板库?全部自己轮轮子?
本来就是空间换速度,编译期换运行期的东西,要怎么用,用多少,哪儿用,都是你项目组织人的事。大项目,预算有限,就别全用c++,资源分配在哪儿都是你自己的事,还不是自己能力不足。
【 在 smartbear 的大作中提到: 】
: 见过一个“脑子够用的”,用template metaprogramming写了不超过三万行代码,编译要64G内存服务器,代码基本无法单步debug,新人无法接手,代码有些莫名奇妙的内存问题一直找不到,还不交最新代码。最后老板果断开人,代码几个人过了一遍感觉没法继续开发,直接废了,重新开发
: 这种“聪明人”,后面真是遇到一个开一个
:
--
修改:ziqin FROM 115.193.165.*
FROM 115.193.165.*
看你这个贴子,你是基本的审美包容都做不到,更加不要说什么逻辑了。
别人和你说,你学了才能懂,你说你不懂,所以学都不愿意学。
学渣不就是这样么,以为自己能控制自己,其实根本不知道是什么东西在控制自己
【 在 sujkvato 的大作中提到: 】
: 压根不学,就谈能不能学会。。。就像一盘菜看着就恶心,你讨论烧菜技巧,然而技巧再高看着恶心也不会吃,什么是拒绝懂不,这么简单的道理不能理解?
: 要么大脑简单,要么习惯性杠精。。。你哪个?
: 从这回帖看,比较像前者,基本逻辑都不能捋直叠加无脑幻想。。。
: ...................
--
FROM 60.190.252.*