将 C 组件集成到 C++ 中的最佳实践是什么?框架?
将 C 组件放入 C++ 框架的最佳实践是什么?
我们的实验室正在为我们的研究构建一个 C++ 框架。它使用一些现有的软件作为组件。我的工作是用C语言集成软件。软件的结构非常简单:
- Ah中的一组
extern
变量 - Bh中的一组数据结构定义和函数原型
- 其余的源代码是.c 文件实现 Bh 中定义的函数
What's the best practice for putting a C component into a C++ framework?
Our lab is building a C++ framework for our research. It uses some existing software as components. My job is to integrate software in C. The structure of the software is quite simple:
- A set of
extern
variables in A.h - A set of data structures definitions and function prototypes in B.h.
- The rest of the source code are .c files implementing the functions defined in B.h.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
值得考虑的是,是否可以使用 C++ 的附加功能有效地改进客户端使用方式。您通常可以简单地包装 C 函数以获得更具 C++ 风格的体验。例如:
x = a + b
而不是x = add(a, b)
)void*
类型的转换,这只是我突然想到的东西。如果您展示具有代表性的函数示例,则更容易给出具体答案。
当然,正如您所说,您拥有 C 源代码,您可以尝试使用 C++ 编译器对其进行编译,这将为您提供避免“extern C”和一些全局命名空间污染的选项,以及添加上面的大部分内容不是作为包装器,而是作为对现有代码的调整:可以节省您的时间并使维护更容易。
It's worth considering whether the style of client usage can usefully be improved using the additional features of C++. You can often trivially wrap C functions for a more C++-style experience. For example:
x = a + b
instead ofx = add(a, b)
)void*
typeThis just off-the-top-of-my-head stuff... it's much easier to give concrete answers if you show a representative sample of the functions.
And of course, as you say you have the C source code, you can try compiling it with the C++ compiler, which would give you the option of avoiding "extern C" and a bit of the pollution of the global namespace, as well as adding much of the above not as wrappers but as tweaks to the existing code: may save you time and make maintainence easier.
用以下内容包装所有 C 头文件和源文件:
这是在 C++ 编译器中正确编译和链接的。这只是第一步。根据实现以及函数在 C 代码中的使用方式,C++ 编译器可能会抱怨一些事情。但请尝试将此作为您的第一步。
有关如何从 C++ 访问 C 函数的详细介绍,请参见此处。
Wrapping all the C header and source files with:
This is compile and link properly in a c++ compiler. This is just an initial step. Depending on the implementation and how the functions are used in the C code, the c++ compiler may complain about few things. But try this as a your first step.
See here for a nice introduction on how to access C functions from C++.