C++的Concept/Model模式

📅 发布时间:2026/8/22 13:33:15
C++的Concept/Model模式
在 C++(尤其是 C++20 引入 Concepts 之后)中,Concept/Model(概念/模型)是一种非常强大的泛型编程范式。它不仅能让你的模板代码更安全、可读性更高,还能实现优雅的运行时多态(类似于接口,但没有虚函数表的开销)。为了让你、、彻底搞懂它,我们把它拆成两部分来看:1. C++20 原生的 Concepts 语法(编译期的约束)2. 经典的 Concept/Model 设计模式(用模板实现非侵入式多态)C++20 中的 Concept 与 Model (编译期)在 C++20 中,Concept(概念)*是对类型的一种约束(Constraint)。如果一个具体类型满足了这个 Concept 的要求,我们就可以说这个类型是该 Concept 的一个 Model(模型)。核心概念Concept (概念):定义了类型必须具备的能力(比如:必须可迭代、必须有 draw() 方法、必须是整数等)。Model (模型):满足 Concept 条件的具体数据类型。我们给一个简单的实例#include iostream #include concepts // 1. 定义一个 Concept:要求类型必须有 draw() 方法 templatetypename T concept Drawable = requires(T t) { { t.draw() } - std::same_asvoid; // 必须有 draw() 且返回 void }; // 2. 定义两个 Model(具体类型) struct Circle { void draw() const { std::cout "Draw Circle\n"; } }; struct Text { void draw() const { std::cout "Draw Text\n"; } }; struct Secret {