CRTP奇异递归模板模式详解
请解释CRTP(Curiously Recurring Template Pattern)的原理,并给出在静态多态中的应用示例。
回答
孤独的心
CRTP中派生类将自己作为模板参数传给基类:
template<typename Derived>
class Base {
public:
void interface() {
static_cast<Derived*>(this)->implementation();
}
};
class Derived : public Base<Derived> {
public:
void implementation() { /* 具体实现 */ }
};
应用场景:
- 静态多态:避免虚函数开销,通过CRTP实现编译期多态
- 代码复用:如
enable_shared_from_this - 混入(Mixin):在编译期向类中添加功能
- 奇异递归泛型模式:如对象计数、单例模式
优点:零运行时开销。缺点:代码可读性降低,类型不兼容。