Policy-Based 设计
策略模板参数组合行为、std::char_traits 定制、CRTP 静态多态
Policy-Based 设计
Policy-Based Design 把行为抽成模板参数——像搭积木一样组合类的能力。标准库的 std::char_traits 就是这个模式。
学完本章你将: 掌握策略模板参数、CRTP 静态多态。
Policy 模式
cpp
// 策略:不同的锁策略
struct NoLock {
void lock() { }
void unlock() { }
};
struct MutexLock {
std::mutex m;
void lock() { m.lock(); }
void unlock() { m.unlock(); }
};
// 组合策略的类
template <typename T, typename LockPolicy = NoLock>
class ThreadSafe {
T value;
LockPolicy lock;
public:
void set(T v) { lock.lock(); value = v; lock.unlock(); }
T get() { lock.lock(); T v = value; lock.unlock(); return v; }
};
// 编译期选择策略
ThreadSafe<int> unsafe; // 无锁
ThreadSafe<int, MutexLock> safe; // 有锁
CRTP —— 静态多态
cpp
template <typename Derived>
class Base {
public:
void interface() {
static_cast<Derived*>(this)->implementation(); // 编译期绑定
}
};
class Derived : public Base<Derived> {
public:
void implementation() { std::cout << "Derived\n"; }
};
Derived d;
d.interface(); // 编译期确定调用 Derived::implementation——无虚函数开销