我正在D中编写一个模板化结构,它使用字符串mixin
并编译时间函数以实现其某些功能。基本上,它采用以下格式:
string genCode(T)() {
// ...
}
struct MyTemplate(T) {
mixin(genCode!(T)());
// ...
}
看看这个,genCode()
显然是我的模板类的实现细节;将其公开暴露出应该真正属于私人的逻辑,而这种逻辑可能会发生变化。它还使模块的导出命名空间变得混乱。
但是,当我尝试将其设为private
时,D会抛出错误。据我所知,字符串mixin
中的表达式在实例化的MyTemplate
范围内进行评估,这导致D声明未声明符号genCode()
。
这有什么办法吗?我是否只需要将genCode()
作为公共函数使用,或者是否有某种方法可以隐藏它?
答案 0 :(得分:1)
请提供演示主题的代码示例。
module x.gen;
private string genCode(T)() {
return T.stringof ~ " a;";
}
module x.test;
import x.gen;
struct MyTemplate(T) {
mixin(genCode!(T)());
}
void main() {
MyTemplate!int m;
m.a = 3;
}
必须选择所需的访问级别:public,private,package。这些是为访问级别提供的唯一控件。如果需要其他任何东西,那是不可能的。
相关错误: