I.9: If an interface is a template, document its parameters using concepts(如果接口是模板类型,则使用concept文档化其参数)
Reason(原因)
Make the interface precisely specified and compile-time checkable in the (not so distant) future.
这样做可以让接口被准确地定义,并且将来可以在编译时检查。
译者注:concept是C++20将要引入的新特性。使用concept库可以实现编译时对模板参数的检查,从而大大降低使用模板的难度。详细请参照:https://en.cppreference.com/w/cpp/concepts
Example(示例)
Use the ISO Concepts TS style of requirements specification. For example:
使用ISO Concepts技术规范风格的需求定义,例如:
template<typename Iter, typename Val>// requires InputIterator<Iter> && EqualityComparable<ValueType<Iter>>, Val>Iter find(Iter first, Iter last, Val v){ // ...}
Note(注意)
Soon (maybe in 2018), most compilers will be able to check requires
clauses once the //
is removed. Concepts are supported in GCC 6.1 and later.
不久以后(可能在2018年内),如果移除代码中的“//”,很多编译器将可以检查requires从句。GCC6.1及以后的版本都会支持Concepts。
译者注:
1.由于作者在考虑这条准则的时候,concept还没有被标准C++支持,因此暂时用“//”注释掉。
2.2019/9开始,VisualStudio2019预览版也能够支持concept。
See also: Generic programming and concepts.
参考:泛型编程和concepts。
阅读更多更新文章,请关注微信公众号【面向对象思考】