D中的私有代码生成功能?

时间:2014-05-25 04:23:53

标签: templates namespaces d private template-meta-programming

我正在D中编写一个模板化结构,它使用字符串mixin并编译时间函数以实现其某些功能。基本上,它采用以下格式:

string genCode(T)() {
    // ...
}

struct MyTemplate(T) {
    mixin(genCode!(T)());
    // ...
}

看看这个,genCode()显然是我的模板类的实现细节;将其公开暴露出应该真正属于私人的逻辑,而这种逻辑可能会发生变化。它还使模块的导出命名空间变得混乱。

但是,当我尝试将其设为private时,D会抛出错误。据我所知,字符串mixin中的表达式在实例化的MyTemplate范围内进行评估,这导致D声明未声明符号genCode()

这有什么办法吗?我是否只需要将genCode()作为公共函数使用,或者是否有某种方法可以隐藏它?

1 个答案:

答案 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。这些是为访问级别提供的唯一控件。如果需要其他任何东西,那是不可能的。

相关错误: