【发布时间】:2011-03-29 02:15:16
【问题描述】:
将 C 组件放入 C++ 框架的最佳实践是什么?
我们的实验室正在为我们的研究构建一个 C++ 框架。它使用一些现有的软件作为组件。我的工作是用 C 语言集成软件。软件的结构很简单:
- A.h 中的一组
extern变量 - B.h. 中的一组数据结构定义和函数原型。
- 其余的源代码是实现 B.h 中定义的功能的 .c 文件。
【问题讨论】:
标签: c++ c design-patterns
将 C 组件放入 C++ 框架的最佳实践是什么?
我们的实验室正在为我们的研究构建一个 C++ 框架。它使用一些现有的软件作为组件。我的工作是用 C 语言集成软件。软件的结构很简单:
extern 变量【问题讨论】:
标签: c++ c design-patterns
值得考虑使用 C++ 的附加功能是否可以有效地改进客户端使用方式。您通常可以简单地包装 C 函数以获得更多 C++ 风格的体验。例如:
x = a + b 而不是x = add(a, b))void* 类型进行转换这只是我脑海中浮现的东西......如果你展示一个有代表性的函数示例,那么给出具体答案会容易得多。
当然,正如你所说,你有 C 源代码,你可以尝试用 C++ 编译器编译它,这可以让你选择避免“extern C”和一些全局命名空间的污染,以及添加上述大部分内容,而不是作为包装,而是作为对现有代码的调整:可以节省您的时间并使维护更容易。
【讨论】:
cleanly encapsulate data returned by some function calls that is then used as inputs... 对于从 C++ 的角度来看实际上是“由内而外”建模的所有 C API 尤其如此,例如使用不透明的 HANDLE 或任何可以翻转的上下文一堂课。
用以下代码包装所有 C 头文件和源文件:
#ifdef __cplusplus
extern "C" {
#endif
//... rest of the file
#ifdef __cplusplus
}
#endif
这是在 c++ 编译器中正确编译和链接。这只是第一步。根据实现以及函数在 C 代码中的使用方式,c++ 编译器可能会抱怨一些事情。但请将此作为您的第一步。
请参阅here,了解有关如何从 C++ 访问 C 函数的精彩介绍。
【讨论】: