用途:该技能用于指导编写遵循 Andrei Alexandrescu《Modern C++ Design》思想的 C++ 代码,核心是把模板当作编译期编程语言,用类型系统做设计工具,而非仅作安全机制。
主要能力与原则:基于策略的设计(Policy-Based Design),用可互换的策略类组合出类型并定制行为,避免继承与虚表开销;尽可能把计算放到编译期;支持类型列表与模板元编程,把类型当作可操作的一等公民;用类型实现经典设计模式,追求零运行时开销。
写作约定:应思考行为能否作为编译期策略;用 static_assert 记录并强制约束;对基于类型的逻辑优先用标签分派而非运行时分支;让模板对 SFINAE 友好(C++11/14)或使用 concepts(C++20);显式记录模板需求。避免在静态多态足够时使用运行时多态,避免只因类型不同而重复代码,避免忽略编译期计算机会,不要让模板错误变成晦涩的实例化失败。
推荐做法:以策略类替代策略模式(无 vtable);以类型萃取替代运行时类型检查;现代 C++ 中优先 constexpr 函数而非模板元函数,优先 concepts 而非 SFINAE,优先可变参数模板而非递归类型列表。
适用场景:需要极致性能(零运行时开销)、行为变体在编译期已知、构建带大量配置选项的库、频繁进行基于类型的分派。限制与规避:真正需要运行时多态、编译时间已构成问题、团队不熟悉模板元编程时不宜使用。
资料中给出了策略式设计、类型萃取与 SFINAE、编译期类型列表、模板访问者等示例代码,涉及 must 保留的用法(如 std::enable_if_t、std::void_t、static_assert、overloaded 辅助类等),具体实现以原文为准。该技能未提供安装命令、平台、收费与价格信息。