exi*_*all 6 templates namespaces d private template-meta-programming
我正在D中编写一个模板化结构,它使用字符串mixins和编译时间函数来实现它的一些功能.基本上,它采用以下格式:
string genCode(T)() {
// ...
}
struct MyTemplate(T) {
mixin(genCode!(T)());
// ...
}
Run Code Online (Sandbox Code Playgroud)
看看这个,genCode()显然是我的模板类的实现细节; 将其公开暴露出应该真正属于私人的逻辑,而这种逻辑可能会发生变化.它还使模块的导出命名空间变得混乱.
private但是,当我尝试制作它时,D会抛出错误.据我所知,字符串中的表达式mixin是在MyTemplate实例化的任何范围内计算的,这导致D genCode()声明未声明符号.
有没有办法解决?我是否只需要genCode()作为公共功能一起生活,还是有某种方式可以隐藏它?
请提供演示该主题的代码示例。
module x.gen;
private string genCode(T)() {
return T.stringof ~ " a;";
}
Run Code Online (Sandbox Code Playgroud)
module x.test;
import x.gen;
struct MyTemplate(T) {
mixin(genCode!(T)());
}
void main() {
MyTemplate!int m;
m.a = 3;
}
Run Code Online (Sandbox Code Playgroud)
必须选择所需的访问级别:公共、私有、包。这些是为访问级别提供的唯一控件。如果还有什么想要的,那是不可能的。
相关错误:
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |