将C组件集成到C ++框架中的最佳实践是什么?

时间:2011-03-29 02:15:16

标签: c++ c design-patterns

将C组件放入C ++框架的最佳做法是什么?

我们的实验室正在为我们的研究构建一个C ++框架。它使用一些现有软件作为组件。我的工作是将软件集成到C中。软件的结构非常简单:

  • A.h
  • 中的一组extern变量
  • B.h.中的一组数据结构定义和函数原型。
  • 其余的源代码是.c文件,它们实现了B.h.中定义的功能。

2 个答案:

答案 0 :(得分:3)

值得考虑的是,使用C ++的附加功能是否可以有效地改进客户端使用的风格。您通常可以轻松地包装C函数以获得更多C ++风格的体验。例如:

  • 对象可能能够:
    • 干净地封装某些函数调用返回的数据,然后将其用作以后调用的输入,使其存储和使用更加隐含
    • 提供关于正确的构造顺序(初始化),使用和销毁(清理)的保证
  • 命名空间可以帮助对标识符进行分组和消除歧义
  • 运算符重载可以允许对类型的操作更像数学或逻辑表达式(例如x = a + b而不是x = add(a, b)
  • 异常可能会减少客户端代码中必须显式检查和处理错误值的位置数(如果此错误相关代码当前正在混淆程序逻辑,则非常有用)
  • 如果任何功能通过void * s实现通用功能,则可以将模板作为前端提供,自动进行void*类型的转换

这只是我头脑中的东西......如果你展示一些有代表性的功能样本,那么给出具体答案要容易得多。

当然,正如你所说的那样你有C源代码,你可以尝试使用C ++编译器进行编译,它可以让你选择避免“extern C”和一些全局命名空间的污染,以及上面的大部分内容不是作为包装,而是作为对现有代码的调整:可以节省您的时间并使维护更容易。

答案 1 :(得分:2)

用:

包装所有C头文件和源文件
#ifdef __cplusplus
extern "C" {
#endif

//... rest of the file

#ifdef __cplusplus
}
#endif

这是在c ++编译器中正确编译和链接。这只是一个初始步骤。根据实现以及如何在C代码中使用函数,c ++编译器可能会抱怨一些事情。但试试这是你的第一步。

有关如何从C ++访问C函数的详细介绍,请参阅here