如何将C++模板编写的库闭源

问题描述 投票:0回答:4

读完这篇文章在.CPP文件中存储C++模板函数定义后,我知道使用模板的类的定义必须以某种方式写入头文件中。因此客户端用户可以通过导入头文件来使用它。这不是意味着完整的实现细节已经向用户公开了吗?这是否也意味着用模板编写的库必须以开源方式提供?

感谢您帮助澄清。

c++ templates
4个回答
8
投票
  1. 模板实现的详细信息将可见。 但是,如果您知道哪些参数是必需的,则可以提供显式模板实例化。 但要成为通用解决方案,您必须提供实现,以便它可以与其他参数一起使用。

  2. 不,您不必将其作为开源发布。 仅仅因为有人可以看到代码,并不意味着它必须是开源的。 您几乎可以随心所欲地许可它,并且购买者必须遵守这些规则。 毕竟,仅仅因为我们可以看到小说的整个文本并不意味着我们可以用它做任何我们想做的事。


4
投票

是的,基于模板的 C++ 库公开了它们的实现。 提供源代码与“开源”不同。 Microsoft 提供了 MFC 的源代码,但它不是开源的。 许可证很重要。


2
投票

这确实意味着基于模板的库通常有源代码,是的。这与通常使用“开源”的方式并不特别相似。话又说回来,大多数好的库在任何情况下都提供源代码。


0
投票

Swift 泛型不同,C++ 模板纯粹是编译时功能。 C++ ABI 中没有直接支持它。因此,简而言之,您无法使用 C++ 模板创建不透明(预编译)共享库,以供客户端代码与随机未知模板参数一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.