30 August 2023

C++ 核心指南目录

“Whenever possible use standard concepts”

理由

GSL 和 ISO 标准提供的标准 concept 可以帮我们节省时间,避免自己去考虑细节。这些标准的 concept 往往比我们自己仓促中想出的 concept 更加周全,从而提互操作性。

注意

大部分的 concept 都已经在标准库中定义了,除非是你要创建新的泛型库,你需要定义新的 concept

例子

template<typename T>
    // don't define this: sortable is in <iterator>
concept Ordered_container = Sequence<T> && Random_access<Iterator<T>> && Ordered<Value_type<T>>;

void sort(Ordered_container auto& s);

这里 Ordered_container 似乎是挺合理的,但是跟标准库中的 sortable 很相似。这个更好?更正确?是不是跟标准中对 sort 的要求一致?那么,是不是最好直接用 sortable

void sort(sortable auto& s);   // better

注意

标准的 concept 会随着 ISO 标准的开发不断完善。

注意

设计一个有用的 concept 是很大的挑战。

强化

  • 检查没有限制的参数,用到不太常见的非标准的 concept 的模板,用到没有证明的自己撸的 concept
  • 开发一个 concept 拓展工具