d同时模板查找名不检查模板外
string ta(string s) { return s ~ "1"; }
template ta(string s) { enum ta = .ta(s); }
void main()
{
import std.stdio;
writeln(ta("a"), ' ', ta!"b");
}
预期输出"a1 b1"
,所以编译器一般可识别
符号何时引用
函数,何时引用模板
,但是如果我在ta*
模板内删除ta(s)
之前的.
号,它会报错:
<src>(2)
:错误:前向引用ta
变量
<src>(6)
:错误:实例化<src>.ta!"b"
模板错误.
这似乎是个(优先级
不高)小限制,即在(同名
)模板内,查找
符号时,不会在模板外
查找其他可能匹配符号,且需要在前面加个"."
号来告诉它查看顶级
符号.
问题是,解析'ta(s)'
时,'ta'
首先搜索的域
是当前域
,而已按枚举
定义'ta'
符号.因此要加点
号.替代方法是加特例
.
总之,编译器正确
的干活,无错误.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现