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

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()作为公共功能一起生活,还是有某种方式可以隐藏它?

he_*_*eat 1

请提供演示该主题的代码示例。

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)

必须选择所需的访问级别:公共、私有、包。这些是为访问级别提供的唯一控件。如果还有什么想要的,那是不可能的。

相关错误: