GPT4又把程序员取代了?(下)
书接上文

第一个错误是类型不对,需要转类型,第二个应该是和某个类型重名了,第二个问题它直接改名字就解决了,但第二个问题它试图通过转换指针类型来解决,显然是不合理的,加上一些其他不合理的设计。
我们一步一步告诉它需要修改什么(不然它理解不了):


实际上我们这是个头文件,如果使用这个小聪明,那么可能会导致多个文件在包含这个头文件的时候重置__COUNTER__宏或者其他问题
于是,我们让它添加一个extern全局变量存储id,extern uint32_t component_id_counter;(修改不多,就不截图了,专栏一长就开始卡,打个字都需要几秒钟),将常量后面的__counter__换成了这个变量的++(注意,虽然xx++在c++现在是ub,但在c中还是原来的那种效果,话说回来C++岂不是......)
然后我们可以适当的让它做些优化,以方便我们全局管理不同的hashmap,即将不同component的存储通过这里的这个typeid绑定到一个全局的hahsmap中


由于接下来的修改可能比较难描述,所以这里再次使用中文






然后外部的map得初始化,但此时上下文并没有可以用的allocator,所以其实更好的方案是建立一个world类型来管理这些逻辑


让我们来一点一点让它修复




那么,我们先给world加上一个实体管家吧:


然后构造和析构函数更新一下:


那么,我们具体一点


那自然是reject了,那么我们只能让它写个deque了




但是,它没有使用我们提供的allocator,也没有在内存不够的时候扩建,我不满意:


现在就将其用作entity管家了:



那么,接下来修改系统的问题:
首先是系统函数的定义不应该规定固定的参数,这就不能想获取什么就获取什么了


而且貌似component table有点不太对,那就先修改component table





接下来的问题是各个component的hashmap类型并不相同,如何放进全局的这个map里面?
那么只有void*可以帮我了

看起来正常了(至于宏后面掉了的\我给补上就好),接下来为了避免重名,我们需要一点类型别名:



接下来,加点系统相关的功能,比如系统需要多线程运行之类的



看起来它理解成我们就是需要这两个特定的类型了


然后,之前的系统自然是不能用了,但也并非仅仅将这里的这个函数当成系统,所有系统都具有直接访问world的权利,数据必然爆炸
那么我们不妨初步设计一种方案,一个多线程执行管理器,一个为这个多线程执行管理器分配数据的数据管理器用于根据任务需要的数据分配数据


但貌似系统的类型还不太对,不过得先让它使用page allocator

我们得让它提供反复执行系统的逻辑




它将所有task的执行移到run_task中,但还是在加入任务的时候就把数据放进去了,由于不知道有没有发生copy,所以我们将无从得知数据是否会随着程序执行而更新,而且它虽然移动了逻辑但是没有调用专门的线程,所以还是block了

其实任务是每一帧执行,而不是单独开一个线程然后让这个线程跑循环,这样不很快你cpu就炸了吗


看来得采用我写注释它来实现的方式了


然后得让它更新task manager





其实,如果统一为任务分配资源就可以适当减少心智负担:


那么,我们来试试现在的代码

除了一些语法错误以外还有一些类型错误,包括但不限于使用void*来表示某个hashmap但无法转回去之类的,在下实力有限,无法修改这些代码并使其正确,各位有兴趣可以尝试一下,以下是我尝试修改了一些但仍然问题很多的代码: