寻找不同的方式共享C++;具有不同C++;应用 我试图找到不同的方法来重用不同应用程序中的C++函数。例如,假设我有以下功能: Function A(){} // this will do a complex math operation Function B(){} // this will load a complex shape file Function C(){} // Print the results. 我需要在3个不同的C++程序中使用上述3个函数。它们是完全独立的,我想知道最好的方法是在我所有的应用程序中使用它们,而不是三次编写相同的代码

寻找不同的方式共享C++;具有不同C++;应用 我试图找到不同的方法来重用不同应用程序中的C++函数。例如,假设我有以下功能: Function A(){} // this will do a complex math operation Function B(){} // this will load a complex shape file Function C(){} // Print the results. 我需要在3个不同的C++程序中使用上述3个函数。它们是完全独立的,我想知道最好的方法是在我所有的应用程序中使用它们,而不是三次编写相同的代码,c++,dynamic,static,modular,C++,Dynamic,Static,Modular,我正在考虑以下选择: Option A: Writing static library Option B: Writing dynamic library Option C: Windows Services Option D: Same code and compile everywhere 还有其他选择吗?或者最好的选择是什么 如果这些函数仅由您和/或您的同事“内部”调用(即,它们不会暴露给无法访问您的源代码存储库的人),那么选项(D

我正在考虑以下选择:

      Option A: Writing static library 
      Option B: Writing dynamic library 
      Option C: Windows Services 
      Option D: Same code and compile everywhere 

还有其他选择吗?或者最好的选择是什么

如果这些函数仅由您和/或您的同事“内部”调用(即,它们不会暴露给无法访问您的源代码存储库的人),那么选项(D)就足够了。只需将.cpp和.h文件保存在源代码存储库的一个已知子目录中,并根据需要让每个应用程序的项目文件引用它们。这很容易实现,并为您提供了最大的灵活性(因为每个项目都可以使用不同的编译器标志编译共享的.cpp文件,这些标志最适合自己的需要,如果需要的话——使用库,您必须找出一组编译器标志,这些标志适用于所有希望链接到库的应用程序,这并不总是很方便)

如果你正在编写一个供公众使用的API,OTOH,事情会变得更复杂一些,因为在你向公众发布代码之后,你将不再完全控制使用哪个版本以及在哪里使用。在这种情况下,你必须根据你的用户是谁以及你认为他们最满意的内容来做出决定伊思

选项C可能会被抛弃,因为它对这类事情来说太过分了,而且会带来惩罚,将代码绑定到特定的操作系统上,而没有任何补偿优势。

选项D(到处编译)一直存在,唯一的例外是与许许多多其他人(或封闭源代码)共享的独立库

  • 这使得管理发行版变得容易得多,因为实际上没有任何版本——库的每个副本都可以在方便的时候独立更新
  • 这使得每个项目都可以很容易地调试到库中,使用正在使用的库的特定版本
  • 这为您提供了为每个项目定制库的选项——但明智地使用此功能可以最小化合并的复杂性
此选择与是否将库作为构建过程的一部分构建到单独的二进制包中无关


我建议使用git submodules之类的工具来管理代码——除此之外。

唯一可能的答案可能是:这取决于它!它所依赖的东西很多,首先,它很大程度上取决于您的用例,我们对此一无所知。这也取决于您是否需要“函数”要成为类似实用程序的函数,如果您可以预测其未来的所有用途(通常您不能),未知应用程序是否将使用这些函数,以及未来未知应用程序可能希望如何使用您的函数,从而允许远程“调用”这些函数(即通过网络),以及许多其他事情。因此,不幸的是,您目前的问题是只需执行静态库,然后如果需要,您可以稍后将其转换为动态库。Windows服务对于库来说没有多大意义,因为Windows服务通常提供完整的服务,而不仅仅是一项功能和功能OU必须具有某种类型的进程接口,例如管道、共享内存、共享数据文件或套接字。C++头文件完全被内联调用,作为动态库构建C API。