cpp CRTP 静态多态 例子
时间: 2025-06-05 17:03:44 浏览: 8
CRTP(Curiously Recurring Template Pattern),即“奇怪的递归模板模式”,是一种利用 C++ 模板机制实现静态多态的技术。它通过在编译期确定类型和行为,避免了动态多态(如虚函数)所带来的运行时开销。
### CRTP 的基本原理
假设我们有一个基类 `Base` 和一个派生类 `Derived`,我们可以让 `Base` 接受一个模板参数,并将这个模板参数设置为 `Derived` 类型。这样,`Base` 就可以访问 `Derived` 中定义的成员函数或变量,从而实现编译期的多态行为。
#### 示例代码
```cpp
#include <iostream>
// 基类模板
template<typename T>
struct Base {
void interface() { // 公共接口
static_cast<T*>(this)->implementation(); // 调用派生类的具体实现
}
};
// 派生类 A 实现
struct DerivedA : public Base<DerivedA> {
void implementation() {
std::cout << "DerivedA implementation" << std::endl;
}
};
// 派生类 B 实现
struct DerivedB : public Base<DerivedB> {
void implementation() {
std::cout << "DerivedB implementation" << std::endl;
}
};
int main() {
DerivedA a;
DerivedB b;
a.interface(); // 输出: DerivedA implementation
b.interface(); // 输出: DerivedB implementation
return 0;
}
```
在这个示例中:
1. `Base` 是一个模板类,接受派生类作为其模板参数。
2. `interface()` 函数是一个通用接口,在其中调用了 `T*` 所指向类型的 `implementation()` 方法。
3. 因为 `static_cast<T*>` 确保了对正确的派生类实例进行操作,所以能够实现在编译期间选择具体的实现。
这种设计的好处在于所有绑定都在编译阶段完成,因此没有动态分发的成本。
---
阅读全文
相关推荐










