D 模板参数
D是否支持模板参数?我怎样才能使以下各项发挥作用D 模板参数,d,D,D是否支持模板参数?我怎样才能使以下各项发挥作用 struct Type(alias a, alias b) { alias a A; alias b B; } template MakeType(alias a, alias b) { alias Type!(a, b) MakeType; } template Foo(alias a, U) // where U is a Type { //... } template Foo(alias a, U : MakeType!(a,
struct Type(alias a, alias b) { alias a A; alias b B; }
template MakeType(alias a, alias b)
{
alias Type!(a, b) MakeType;
}
template Foo(alias a, U) // where U is a Type
{
//...
}
template Foo(alias a, U : MakeType!(a, b), b...) // where U is a specialization
{
//...
}
而Foo
应该这样称呼:
alias MakeType!(5, 7) MyType;
alias Foo!(5, MyType) Fooed; // error
错误:模板实例Foo!(5,键入!(5,7))Foo!(5,Type!(5,7))与模板声明Foo(别名a,U:MakeType!(a,b),b…)不匹配
在使用中:
alias MakeType!(1, 3) MyType1;
alias MakeType!(5, 7) MyType2;
Foo!(5, MyType1) // calls the first Foo()
Foo!(5, MyType2) // calls the second Foo() with specialization
注意:在我的实际情况中,a
和b
不是简单的整数值;它们是用户定义类型的实例。这里的目标是从MakeType的其余参数中填充b,对吗?您可以手动检查它:“模板Foo(别名a,U,b…)if(is(U==MakeType!(a,b))”与“别名Foo!(5,MyType,7)Fooed”一起使用;但和和b都是显式给出的。现在,如果MyType有一个类型为b的成员,您可以很容易地将其导出,而不是作为模板参数,而是作为成员。比如:@AdamD.Ruppe我不能明确给出a
和b
。MyType可以有a
和b
的别名,我更改了代码以反映这一点。还要注意的是,Foo
中的U
是一种专门化。
alias MakeType!(1, 3) MyType1;
alias MakeType!(5, 7) MyType2;
Foo!(5, MyType1) // calls the first Foo()
Foo!(5, MyType2) // calls the second Foo() with specialization