1

免责声明:我知道任何一方的纯粹主义者,C 或 C++,都不会喜欢这样。这项工作需要完成。

我想尽可能多地使用 C++ 的非 OOP 相关特性来使我的类 C 编码(当然是用 C++ 编译器编译)更有趣。最终产品应该是一个类似 C 的库(和一个随附的可执行文件),它相对容易嵌入到 C 程序中。

例如,我非常需要的是函数重载。我猜客户端代码(用 C 编写)可以使用libffi或类似代码来获得重命名的名称,因此可以调用函数。

其他不错的功能是默认值,也许还有模板

我不会使用任何 C++ 库(只有 C),没有例外,没有 RTTI,也没有对象。

  1. 什么是 C 中没有的 C++ 功能的完整列表,我可以在这些限制下使用这些功能,以及有哪些常见的库和技术可以使其尽可能轻松地工作?
  2. 我应该注意什么?

我知道相关问题,但正如我所说,我不想要任何胶水代码(也许除了修饰部分,如果他不使用 C++,客户必须这样做),我不会使用任何 OOP 功能。我准备做出妥协。

4

1 回答 1

1

我会因此而被否决很多,因为这并不能真正回答问题,但是...

  • 如果您想从外部被可移植地调用,请使用 C 原型。没有重载,没有默认参数,没有模板,没有 C++ 类型。只有C类型,即。整数、浮点数和指针(指向不透明的不完整 C++ 结构的指针是可以的)。要求客户端库使用 libffi 或类似的库是自找麻烦。
  • 如果你想使用 C++ 特性和库,你可以使用它们并且仍然遵守上面的一些工作(不要忘记extern "C",并捕获所有异常)。

如果客户不愿意使用 C++(这完全可以理解),那么无论如何您都必须编写胶水代码。最小化粘合代码的唯一解决方案是设计一个干净的 API

It is possible to write the "top layer" (close to the externally visible API) in a way that will require almost no glue, and use C++ for the internals.

于 2012-12-20T10:36:01.053 回答