C++有意使用concepts来改进模板使用中编译期检查效果(及生成易读的报错信息)。(同时该机制理论上亦可以用在普通的函数上。)
注意:concepts现在似乎并不是C++标准。
在目前的情况下,C++无法对模板参数进行任何限制,一切错误均需要由编译器在具象化模板并处理到相应位置时才能发现。而在其他一些语言中,可以通过对参数进行一定限制,达到提前发现问题(并且报错更易检查)。
- 比如在Java中,可以对泛型参数进行
extends
或super
限定 - 比如在Rust中,可以对模板参数所要满足的trait进行限制
然而C++中完全没有类似的机制,concepts就是用来解决该问题的方法。在上面两例中,相比起Java,Rust对trait的使用和C++ concepts更为相近。
Concepts声明/定义了该模板参数所应当具有的函数,但又不要求一定是继承某个类而来。该机制同时保留了灵活度,又使得报错更可读。(然而继续增加编译器复杂度,说不定导致编译时间更长。)
您可以在Hypothesis上的該群組內進行評論,或使用下面的Disqus評論。