CppCoreGuidelines T.23 通过添加新的使用模式扩展通用的概念
04 September 2023
“Differentiate a refined concept from its more general case by adding new use patterns.”
理由
不然的话,编译器无法自动区分。
例子
template<typename I> // Note: input_iterator is defined in <iterator> concept Input_iter = requires(I iter) { ++iter; }; template<typename I> // Note: forward_iterator is defined in <iterator> concept Fwd_iter = Input_iter<I> && requires(I iter) { iter++; };
编译器编译器可以根据新的操作符要求确定概念的细化定义。这样可以减少实现这些类型的人的额外工作,去声明新的类型。如果两个概念的要求是一样的,那么他们在逻辑上是等价的(并非细化)。
强化
- 标记两个完全相同规定的概念。从而消除歧义。