如何在编译时对功能进行选通? 我有一个C++应用程序正在开发中。我想发布一个免费版和一个付费版,生产版在现有免费版的基础上增加功能
根据发布类型编译特性的最佳方法是什么?理想情况下,我会将一个标志传递给CMake,这样在构建二进制文件时,它也会包含我在生产版本中需要的任何代码。您自己回答了您的问题:)将一个标志传递给您的编译器,并在您的代码门中包含以下功能:如何在编译时对功能进行选通? 我有一个C++应用程序正在开发中。我想发布一个免费版和一个付费版,生产版在现有免费版的基础上增加功能,c++,cmake,makefile,C++,Cmake,Makefile,根据发布类型编译特性的最佳方法是什么?理想情况下,我会将一个标志传递给CMake,这样在构建二进制文件时,它也会包含我在生产版本中需要的任何代码。您自己回答了您的问题:)将一个标志传递给您的编译器,并在您的代码门中包含以下功能: #ifdef YOUR_FLAG //your extra logic #elif //in case YOUR_FLAG is not defined #endif 我在我开发的一个游戏中使用了完全相同的方法——在免费版本中启用广告,在付费版本中,代码被预处理器排除
#ifdef YOUR_FLAG
//your extra logic
#elif
//in case YOUR_FLAG is not defined
#endif
我在我开发的一个游戏中使用了完全相同的方法——在免费版本中启用广告,在付费版本中,代码被预处理器排除
您也可以使用运行时检查,以防它更适合某些特定任务,但正如问题的注释中所述-代码在那里,篡改内存(翻转您的标志)可能会允许访问受限功能。您将它们作为许可插件添加 即:
#if(n)def
宏化?通常代码总是在那里,但在启用额外的“生产版本”代码的功能之前检查某种验证。@JoachimPileborg这就是破解的原因。@BartekBanachewicz是真的,拥有一个“生产版本”就是盗版有效的原因。:)如果人们想使用你的软件而不付钱,他们会的,没有办法阻止它。他们要么“破解”一个许可副本,要么复制一个完全启用的程序,最终都无关紧要。所以我认为,这是最简单的!问题是,如果您想禁用多个组件的功能,这将变得很难管理。这确实会降低代码的可管理性,但这个问题可以而且应该通过正确使用良好的OOP实践来解决。举个例子:切换到组合并定义可切换功能所需的接口,创建两个类,实现此接口(纯虚拟类或您喜欢的任何其他类型的“接口”构造)(一个具有受限功能,另一个不受限制)然后在#ifdef块中,您只需实例化这两个接口实现中的一个。良好的OOP是王者,设计模式是他的忠诚骑士:)