d改进重载2
原文
理由:目前,查看通过别名参数
传递给模板
重载集时,不能提取重载集
.一般,可用:
__traits(getOverloads, __traits(parent, sym), __traits(identifier, sym))
但只要重载集
包含别名
或其他
模块,此操作就会失败.而
__traits(getOverloads)
始终
内部查找符号
,所以只需要重定义
个单参(当前是错误)来直接
传递该符号
.
需要定义存在导入
重载集时的行为:
// a.d
void foo(int);
void foo(string);
// b.d
void foo();
// c.d
import a;
import b;
__traits(getOverloads, foo); // 哪个?
我在本地
测试了一下,只有在同一个
模块中定义并使用
重载集,才是问题.如,有效的:
// b.d
void first(int) { }
// c.d
void second(string) { }
// a.d
import b : foo = first;
import c : foo = second;
// d.d
import a;
void main()
{
alias overloads = __traits(getOverloads, a, "foo");
static foreach(ov; overloads)
pragma(msg, __traits(identifier, ov));
}
因此,如果知道重载集
定义位置,事情就会正常工作
.
所以取别名
参数的模板
现在需要传递调用模块和串
?
你在此陷入了一点C++
思维.你不应问"能用已拥有的东西
做吗",而是"这是好
还是坏
?",这样做是不好
的.没人想你不能写:
templ!foo
你应该写:
templ!(net.foo.CurrentModule, "foo")
并认为
是的,这是个很好的,设计良好
语言,我应该推荐
给其他人.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现