首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不同的模块中专门化模板?

问如何在不同的模块中专门化模板?
EN

Stack Overflow用户
提问于 2016-07-28 17:51:42
回答 1查看 78关注 0票数 1
代码语言:javascript
复制
module a;
void foo(T)(){
    import std.stdio;
    writeln(T.stringof);
}

module b;
import a;

private alias foo = a.foo;
void foo(T: int)(){
    import std.stdio;
    writeln("Special int");
}
//app.d
void main()
{
    import a;
    import b;
    foo!int();
}

这将打印int而不是Special Int。是否可以跨不同的模块专门化模板?

我可以假设D template specialization in different source file的答案在今天仍然有意义吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 22:29:42

您的别名是错误的,并且您的导入引入了歧义。如果希望别名可以公开重载,请不要将别名设置为私有!

一旦别名被公开(默认的btw),编译这段代码将会显示一个名称冲突错误:

代码语言:javascript
复制
iii.d(6): Error: a.foo(T)() at ii.d(2) conflicts with b.foo at i.d

然后,只需消除歧义(指定b.foo!int()),或者更好的做法是从使用点中删除不必要的import a。

代码语言:javascript
复制
//app.d
void main()
{
    import b;
    foo!int();
}

特殊整型!

对于更复杂的情况,您也可以为模板制作一个包装器并转发参数,但这里使用简单的别名重载-当使用alias foo = a.foo;时,不使用private,就可以做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38632879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档