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提取所有相应符号.这样,不必手动维护要包含构列表,代码会自动提取完整列表.当然,模块导入包含所有定义的模块.
当然,也可让类自动注册.

posted @   zjh6  阅读(11)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示