【问题标题】:C++ Library API Design issuesC++ 库 API 设计问题
【发布时间】:2013-03-26 10:29:39
【问题描述】:

我正在创建一个供第三方使用的 C++ 库。虽然我熟悉创建 C 库,但我几乎没有创建 C++ 库的经验。我担心的是,我需要考虑 C++ 库 API 带来的其他问题。如:

  1. API 中的异常处理。
  2. 类成员对库创建的对象的用户访问权限
  3. 用户销毁库创建的对象,反之亦然。
  4. 谁知道还有什么...

除了 C 库必须考虑的之外,我还必须考虑什么?

最好的问候

【问题讨论】:

  • 1.我会让其他人回答这个问题 2. 根本没有 public 成员,如果用户需要访问某些类成员,请始终使用 seters/getter 3. 尽量避免强迫用户或您的库删除他/它没有的对象' t 创建
  • 你必须考虑所有这些以及更多的合作学徒!异常处理显然是极其重要的一点。在此之前,您必须考虑您的所有客户端是否实际上都支持 C++,或者您可能必须考虑在边界处捕获异常并返回 C 类型的成功/失败。内存管理考虑也是最重要的——不确保包含的内存管理会使您陷入客户端不匹配的分配和释放堆的巨大困境。因此,虽然我可以添加的答案不多,但我也不认为有如此全面的列表
  • 如果您面向 Windows,您的客户必须使用与您完全相同的编译器版本。这在 Linux 和 Mac OS X 上不是什么问题。Windows C++ API 上的 IME 不值得付出努力。该库可以用 C++ 编写,但只导出与 C 兼容的 API。

标签: c++ api shared-libraries static-libraries


【解决方案1】:

C++ 是一种比 C 更复杂的语言,因此您需要注意的问题还有很多。总是存在语言中立的问题,例如如何设计良好的公共/私有分离、文档、版本控制、保持向后兼容性等。但也存在各种 C++ 特定的问题,例如 const 正确性、模板的使用、异常与返回码, 不暴露数据成员,你对继承的使用,考虑复制构造函数和赋值运算符,指针或引用的使用,默认参数,朋友,内联的使用等。

完全公开,我是“C++ API 设计”一书的作者。不想听起来像是我在推这本书,它确实涵盖了您所询问的主题:如何为 C++ 设计好的 API。您可以查看本书的目录,以便对您应该考虑的问题有一个很好的概述。此外,示例章节还讨论了 pimpl 惯用语,我个人喜欢用它来提供更好的 C++ 封装。

http://www.apibook.com/blog/contents

【讨论】:

    【解决方案2】:

    Microsoft 确实为类库提供了设计指南,但不确定是否也适用于 Linux,但这些是通用指南,应该适用于各种平台。

    http://msdn.microsoft.com/en-us/library/czefa0ke(v=vs.71).aspx

    【讨论】:

      猜你喜欢
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多