分发C ++类的最佳方法是什么

时间:2010-06-03 11:00:55

标签: c++

我创建了一个很大的C ++类。我需要把它交给另一个人。 我不希望他看到函数实现,但他应该能够将它作为一个类使用。 (例如:他可以继承此类,在其代码中使用其全部功能但无法查看或更改函数实现等)

我该怎么办? 感谢你..

5 个答案:

答案 0 :(得分:8)

您的代码不太可能值得保密。某些C ++代码(例如您希望在用户代码中内联的模板和函数)必须放在头文件中。如果您真的需要一定程度的保密,可以将非模板函数的实现放在.cpp文件中,编译到库中,然后分发标题和库。当然,用户仍然可以检查库的机器代码。

答案 1 :(得分:7)

在C ++中,class就是:语法结构。您可以根据需要自由安排跨文件的课程。你可以将每个类放入它自己的header / .cpp文件对中,制作只有标题的类,将它们分散到许多文件中 - 如你所愿。

在C ++中,您不分发类,而是分发 文件 。对于某人使用您的代码,他们需要编译器的所有 声明 (类和其他所有内容)以及 定义 匹配链接器的这些声明。 (对于什么是声明,什么是定义,请参阅this answer)。

声明通常被放入头文件中,在C ++中通常以.h.hpp结尾。 (有更多的约定,但这些是我最常见的。)
定义可以在源(.cpp文件)中或在其编译形式中作为目标文件分发。如果需要多个目标文件,它们通常在一个库中组装(在类似Unix的系统上,通常在.a上具有.lib结尾)。

所以这些都是事实:

  1. 您无法避免分发头文件。期。
  2. 如果您不希望其他人看到您的定义,您将需要编译它们并分发目标文件,最好是作为库。

    但分发图书馆肯定有其缺点。 C ++没有为编译代码定义二进制API,因此必须始终使用 相同的编译器 编译代码, 相同的编译器版本 ,以及 相同的编译器设置 ,以便链接在一起。
    这意味着你要么必须指定你的客户他们的编译器设置(如果他们有来自不同供应商的库 - 这很可能是相互冲突的设置,他们很难接受),或者你必须满足他们的所有需求(这会给你带来麻烦) 。

    此外,由于标题中的所有内容都向所有人开放, inline函数的实现 ,就其本质而言, unprotectable 即可。但是为什么在不使用它们提供的性能提升时使用C ++呢?

  3. 最后,分发源文件通常更容易。没有冒犯意味着,但正如尼尔所说:如果你还不知道类和文件之间的区别以及如何分发它们,那么你就不太可能放弃一笔财富。

答案 2 :(得分:0)

只在标题中放入完整的类声明,并将定义保留在.cpp文件中,或者如果你真的是srs,请将类编译为.lib。

答案 3 :(得分:0)

从您的源创建共享或静态库,并为其他人分发头文件以使用您的类。 无论谁使用你的课程,都必须链接你的图书馆。

答案 4 :(得分:0)

最接近你想要的是创建一个.dll for windows或.so for linux和一个lib文件,并将其提供给相关人员。