策略类设计:如何添加CMake选项以选择所需的目标策略类
实现方案
第一步:修改CMakeLists.txt添加配置选项
# 添加用户可选配置,默认关闭即使用RAM实现 option(BUILD_WITH_DISK_STORAGE "Use disk-backed memory implementation for simulation" OFF) # 请将下方的simulation_target替换为你实际的编译目标名 add_executable(simulation_target your_source.cpp) # 根据选项传递编译宏到代码 if(BUILD_WITH_DISK_STORAGE) target_compile_definitions(simulation_target PRIVATE USE_DISK_MEMORY_IMPL) endif()
如果你的代码是作为第三方库供其他项目依赖,把上面的PRIVATE改成PUBLIC,确保依赖该库的目标也能拿到对应的宏定义。
第二步:修改C++代码添加策略别名
在你现有的memory命名空间中新增默认策略别名定义,原有on_RAM、on_disk的实现完全保留即可:
namespace memory { // 原有策略类定义保留 struct on_RAM { /* ... */ }; struct on_disk { /* ... */ }; // 根据编译宏自动选择默认策略 #if defined(USE_DISK_MEMORY_IMPL) using default_memory_policy = on_disk; #else using default_memory_policy = on_RAM; #endif } // end namespace memory
第三步:替换硬编码的策略声明
把代码中所有写死的MyClass<memory::on_RAM>或者MyClass<memory::on_disk>全部替换为:
MyClass<memory::default_memory_policy> my_class_instance;
用户使用方式
用户不需要修改任何源码,只需要在编译时加参数即可切换实现:
- 默认编译RAM版本:
cmake .. && make - 指定编译磁盘版本:
cmake .. -DBUILD_WITH_DISK_STORAGE=ON && make
内容的提问来源于stack exchange,提问作者WaterFox
相关产品推荐
相关产品推荐

