D模板专门化在不同的源文件中
|
我最近问了一个有关如何在D中模拟类型类的问题,并提出了一种使用模板特化的方法。
我发现D无法识别其他源文件中的模板专业化。因此,我不能只对未定义通用函数的文件中包含的文件进行专门化处理。为了说明,请考虑以下示例:
//template.d
import std.stdio;
template Generic(A) {
void sayHello() {
writefln(\"Generic\");
}
}
void testTemplate(A)() {
Generic!A.sayHello();
}
//specialization.d
import std.stdio;
import Template;
template Generic(A:int) {
void sayHello() {
writefln(\"only for ints\");
}
}
void main() {
testTemplate!int();
}
当我运行它时,此代码将显示\“ generic \”。因此,我问是否有一些好的解决方法,以便可以从算法中使用更专业的形式。
我在有关Type类的问题中使用的解决方法是在导入所有带有模板特化文件的文件后混合通用函数,但这有点丑陋且受限制。
我听说c ++ 1x将具有extern模板,这将允许这样做。 D有类似的功能吗?
没有找到相关结果
已邀请:
2 个回复
豆兢
现在有人更新了代码:
完美吧?好帮手:
现在,您仅从导入中更改了specialization.d的行为,实际上,由于无法调用sayHello,这将无法编译。这种高防措施确实存在问题。例如,您可能有一个采用Range的函数,但是您的库的使用者无法传递数组,除非您的库导入std.array,因为这是将数组“转换”为范围的地方。 对于您的问题,我没有解决方法。 Michal的评论提供了第二种形式的劫持的解决方案,其中说specialization.d试图劫持getUserData
凄挡