如何在编译时门功能?

How can I gate features at compile time?

我有一个正在开发的 C++ 应用程序。我想发布一个免费版本和一个付费版本,生产版本在现有免费版本的基础上添加功能。

根据版本类型编译功能的最佳方法是什么?理想情况下,我会向 CMake 传递一个标志,因此在构建二进制文件时,它还会包含我在生产版本中需要的任何代码。

您自己回答了您的问题 :) 将一个标志传递给您的编译器,并在您的代码门中使用以下功能:

#ifdef YOUR_FLAG
//your extra logic
#elif
//in case YOUR_FLAG is not defined
#endif

我在我开发的游戏中使用了完全相同的方法 - 在免费版本中启用了广告,在付费版本中代码被预处理器排除。

您还可以使用 运行-time 检查,以防它更适合某些特定任务,但正如问题评论中提到的那样 - 代码在那里并且篡改内存(翻转你的标志)将可能允许访问受限功能。

您将它们添加为许可插件。

即:

  1. 将代码分开。哎呀,您甚至可以将 "free" 代码许可为开源代码,同时仍然保留您的商业模式。
  2. 让他们 phone 回家或验证一些密钥,以便您知道该人已获得许可。
  3. 确保代码的其余部分可以在删除付费胆量的情况下继续使用。必要时安慰一下。