Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates mixin模板:如何停止编译?_Templates_D - Fatal编程技术网

Templates 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); } 您可以这样做 静态

我有一个mixin模板,它只对某些参数有效。如果参数无效,我想用错误消息停止编译。对于模板,我会使用
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
确实允许您提供更有用的消息