2013-03-26 60 views
3

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

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

我必须超越的,是我必须考虑的C库考虑的?

问候

+0

1.我就让别人回答这个问题 2.只是没有'public'成员所有,总是使用seters /干将,如果用户需要访问一些类成员 3.尽量避免强迫用户或你的图书馆删除他/它没有创建的对象 – SpongeBobFan 2013-03-26 10:36:21

+0

你必须考虑所有这些和更多的共同Padawan!异常处理显然是非常重要的一点。在此之前,您必须考虑您的所有客户端是否都会意识到C++,或者您可能不得不考虑在边界捕获异常并返回C类型的成功/失败。内存管理方面的考虑也是至关重要的 - 不保证包含的内存管理可能会让你陷入由客户分配和释放不匹配的大错误。因此,虽然我可以添加的答案并不多,但我也不认为有如此全面的列表 – user2184879 2013-03-26 10:37:40

+2

如果您的目标是Windows,那么您的客户*必须*使用与您完全相同的编译器版本。这在Linux和Mac OS X上不是什么问题。Windows C++ API上的IME不值得。该库可以用C++编写,但只导出C兼容的API。 – 2013-03-26 11:02:21

回答

4

C++是比C更复杂的语言,所以有您需要知道的多了很多的问题。对于如何设计一个良好的公/私分离,文档,版本控制,维护向后兼容性等,总是存在语言中立的问题。但是,还存在各种C++特有的问题,例如常量正确性,模板使用,异常与返回代码,不暴露数据成员,使用继承,考虑拷贝构造函数和赋值操作符,使用指针或引用,默认参数,朋友,使用内联等。

完全披露,我是本书的作者“C++的API设计”。我不想听起来像推动本书,它确实涵盖了你所问的主题:如何为C++设计良好的API。您可以查看本书目录,以便全面了解您应该考虑的问题。此外,示例章节还包括对pimpl习惯用法的讨论,我个人喜欢这种习惯用法,以便在C++中提供更好的封装。

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