2011-03-29 64 views
0

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

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

  • 在A.H
  • 在B.H。一组数据结构定义和函数原型一套extern变量
  • 其余的源代码是实现B.h.中定义的函数的.c文件。

回答

2

包装纸所有的C头文件和源文件与:

#ifdef __cplusplus 
extern "C" { 
#endif 

//... rest of the file 

#ifdef __cplusplus 
} 
#endif 

这是编译和C++编译器链路正常。这只是第一步。根据实现以及C代码中如何使用函数,C++编译器可能会抱怨几件事情。但试试这是你的第一步。

请参阅here了解如何从C++访问C函数的不错介绍。

3

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

  • 对象可以是能够:
    • 干净地封装了一些函数返回调用,其随后用作输入到后来的呼叫数据,使得其存储和使用多个隐式
    • 提供一些保证关于建筑的正确顺序(初始化),使用和销毁(清理)
  • 命名空间可以帮组和歧义标识符
  • 运算符重载可以允许类型上的操作更像数学或逻辑表达式(例如, x = a + b,而不是x = add(a, b)
  • 异常可能减少在客户端代码的地方,误差值必须明确检查和处理(有用的,如果这个错误相关的代码正在混淆程序逻辑)
  • 如有数功能通过无效* S实现通用功能,那么模板可以提供作为前端,自动转换和从void*

这只是场外的顶级我的头的东西......如果您展示一个具有代表性的函数样本,那么给出具体的答案就容易多了。

当然,正如你所说的你有C源代码,你可以尝试用C++编译器编译它,这会让你选择避免“extern C”和全局名称空间的污染,以及添加上面的许多不作为包装,但作为调整现有的代码:可以节省您的时间,并使维护更容易。

+0

+1:干净地封装一些函数调用返回的数据,然后用作输入......对于所有那些从C++角度来看,C++ API实际上都是“从里到外”建模的,比如使用不透明的手柄或其他任何环境,都可以翻到课堂上。 – 2011-03-29 06:25:52

相关问题