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的答案在今天仍然有意义吗?
发布于 2016-07-29 22:29:42
您的别名是错误的,并且您的导入引入了歧义。如果希望别名可以公开重载,请不要将别名设置为私有!
一旦别名被公开(默认的btw),编译这段代码将会显示一个名称冲突错误:
iii.d(6): Error: a.foo(T)() at ii.d(2) conflicts with b.foo at i.d然后,只需消除歧义(指定b.foo!int()),或者更好的做法是从使用点中删除不必要的import a。
//app.d
void main()
{
import b;
foo!int();
}特殊整型!
对于更复杂的情况,您也可以为模板制作一个包装器并转发参数,但这里使用简单的别名重载-当使用alias foo = a.foo;时,不使用private,就可以做到这一点。
https://stackoverflow.com/questions/38632879
复制相似问题