Templates mixin模板:如何停止编译?
我有一个mixin模板,它只对某些参数有效。如果参数无效,我想用错误消息停止编译。对于模板,我会使用Templates mixin模板:如何停止编译?,templates,d,Templates,D,我有一个mixin模板,它只对某些参数有效。如果参数无效,我想用错误消息停止编译。对于模板,我会使用assert(false,“Yoo的参数无效”),但这不适用于mixin模板。下面的示例如何停止编译 mixin模板Yoo(args…){ 静态if(args.length==0){ pragma(msg,“无效参数!(如何停止编译?); }否则{ pragma(消息,“有效参数:”,参数); } } void main(){ 柳敏敏; mixin-Yoo!(1,2,3); } 您可以这样做 静态
assert(false,“Yoo的参数无效”)
,但这不适用于mixin模板。下面的示例如何停止编译
mixin模板Yoo(args…){
静态if(args.length==0){
pragma(msg,“无效参数!(如何停止编译?);
}否则{
pragma(消息,“有效参数:”,参数);
}
}
void main(){
柳敏敏;
mixin-Yoo!(1,2,3);
}
您可以这样做
静态断言(0,“无效参数!”);
而不是布拉格味精。静态断言类似于
assert
,只是在编译时,它不会在发布模式下被删除,因为它只在编译时被选中,不包含在编译后的代码中。静态断言的另一个替代方法是模板约束:
mixin模板Yoo(args…)if(args.length>0){
使用上面的代码,Yoo!()
将无法编译如下消息
错误:如果(args.length>0),则mixin d.Yoo!()与模板声明Yoo(args…)不匹配
这样做的好处是,如果其他人愿意,他们可以定义自己的
拥有不接受任何参数的Yoo
。使用静态断言且无模板
约束,它们的定义将冲突
但是,static assert
确实允许您提供更有用的消息