Z
ZHANK
编程在线教程C++ 教程Policy-Based 设计
模板深入

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——无虚函数开销