d过时工厂
原文
目前,为每个模块生成的ModuleInfo
构还包括指向该模块中每个类的ClassInfo
的指针.
对此数据的唯一引用是在函数Object.localClasses()
和Object.find()
中.想法是可通过文本串
而不是名字
链接来实例化类
.但增加
了很多额外
尺寸.
1
.有人使用Object.localClasses()
或Object.find()
吗?
2
.有人需要
它们吗?
3
.是否可更改为仅包含标记为"导出"
的类?
4
.可完全删除它吗?
这会影响Object.factory
,是吗?我以前在商业
软件中使用过它.
可用std.traits.moduleName和__traits(allMembers,somemodule)
部分绕过,但是除了在调用
模块中显式引用
类外,还可如何查找
当前模块之外的类呢?
需要用系统
注册这些类,来替换ModuleInfo(模块信息)
和Object.factory
提供的功能.
但那样
会更好,因为编译器
并不与它插入进ModuleInfo
的类完全一致.
还可如下"发布"
,Object.factory
使用的类代码
,即在代码
中创建调用后,为发布的类
返回classinfo
数组的函数
.
我有RPC
和序化/远程复制对象
库,在这些库中,我显式
注册模块,来通过UDA
扫描类(或当类
调用库时,让它们间接
地注册自己
的模块).如果可提前扫描/注册
任意模块中类,而不必另外列举
它们,那就太好了.
(次要)示例是,在变量
类型与typeid
不匹配时调用正确
模板函数的toString(OutputRange)()
启动器.
它不用ModuleInfo
,但可.如果乱序
调用,如果跨多个
文件中有继承类
,可能会错过
注册.
否则,我需要显式
注册要处理的每个类
.
没有
它我也能活,但现在有人提醒
我它有,拥有它
似乎是件好事.
我喜欢做的是让类
自己注册.你可从库导入中这样:
mixin RegisterThis;
缺点
是如果忘记注册子类,直到试用
它,它不会提醒你.优点是可在那里
自定义,避免了扫描
模块,且可不要中心列表
.
RegisterThis
添加了附加
工厂到运行时列表
中的静态构造器
.
如果druntime
提供类似来替换现有的Object.factory
,那就太好了,可
mixin imported!"core.factory".Register;
来迁移
;然后,让所有继承自父对象
或实现指定接口
对象可:
1)
提醒注册,2)
自动自注册,
可用奇异模板(crtp)
模式来实现
它.
在一个项目中,我的方法是用UDA
标记每个构
(用的是构而不是类,但原理相同),然后导入
包含构定义
的所有模块,并用getSymbolsByUDA
提取所有相应
符号.这样,不必手动维护要包含构列表,代码会自动
提取完整列表
.当然,模块
导入包含所有定义的模块
.
当然,也可让类自动
注册.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现