模块条件编译(CMake C++多态 工厂模式)

场景描述:
每年的夏天都会有台风,为了给减少台风对人类造成的损失,需要对产生自海洋的台风路径进行预测。当前,中国,欧盟,日本,美国等各国都会有自己的台风预测部门,他们使用的
算法也不相同。

现在,需要写一个程序,该程序接受一个入参,以指示使用哪个国家的算法来预测台风。使用c++实现,于是自然地会使用多态,建立一个基类(接口类), 各个国家的算法类都继承自该基类。
另外,为了实现跨平台,我们采用CMake来组织编译。借助CMake可以方便地实现选择性编译,例如,你本地有15个国家的算法实现,但是客户只需要3个国家的,于是你可以仅仅编译三个国家
的算法文件,以减少编译时间和可执行文件的大小。


Cmake选择编译的实现:
我们写一个脚本去调用cmake来生成VS工程或linux下的makefile, 脚本调用cmake时可以给cmake传入一些变量,可以在CMakelists.txt文件中判断这些变量的值来决定是否编译某个模块。


工厂模式的技巧:
工厂类中有一个static Vector变量来存储被编译的各个算法类的信息。定义了SolutionInfo类来存储一个算法类的信息(算法的名字,版本,以及 指向‘创建该算法类的对象’的函数指针)。

在base类中定义了两个宏,第一个宏用于向具体的算法类中增加static成员变量(一个是创建该类的对象的函数,一个是SolutionInfo对象来保存该类的信息);第二个宏用于在cpp文件中
为上述增添的第二个static变量进行初始化。

Note: 在SolutionInfo类的构造函数中会调用Factory的register函数,将其注册到Factory的static vector变量中,于是,当用户让Factory生成某个具体的算法类时,该Factory会先检查用户
索取的这个具体算法类是否存在于static vector中,当某个具体的算法类被编译时其才会存在。


Code:

https://github.com/FrankKuiFang/Cmake_Cpp_ConditionalCompile

在windows下,运行build目录下的gen_vs_proj.bat即可在build/build目录下生成vs 工程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

First Snowflakes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值