我已阅读Why can templates only be implemented in the header file?和Why can’t I separate the definition of my templates class from its declaration and put it inside a .cpp file?
如果我创建模板,那么我还要提供对cpp
文件的访问权限 - 除了h
- 文件之外的文件,或直接在头文件中写入定义。
因此,如果我想允许在其他应用程序中完全使用我的模板,那么我无法从外部隐藏它们的实现(用于保护知识产权)。我是对的吗?
答案 0 :(得分:4)
一般来说,你是对的......必须公开实施。
如果您的客户端只需要为他们可以为您列出的有限特定类型集实例化它们,您可以为它们提供预编译的对象/库,其中包含仅针对这些类型的实例化的实现:请参阅{ {3}}
混淆是另一种可能性 - 让他们看到代码,但让它变得混乱和不可维护。
如果这两个选项都不适合,请考虑是否可以提供模板化适配器,该适配器在其用户提供的类型上创建运行时多态接口,捕获算法所需的特定功能集。接受这些适配器作为代码的前端。这确实有运行时成本。
答案 1 :(得分:2)
知识产权主要受法律手段的保护,而不是技术手段。
(例如,读取某些头文件的技术可能性并未赋予我使用它的权利,或将其代码复制到别处)
但是,您可以考虑使用code obfuscation技术。您甚至可以为此目的自定义最近的GCC,即编写MELT免费软件扩展程序。这可能意味着数周(或数月)的工作。
或者,考虑将您的仅标题模板C ++库发布为free software ...(可能使用GPL许可证)。
但是IANAL。你应该问你的律师。