C++ 关于C++;C语言中的类访问/操作
我已经读了几个星期关于堆栈溢出的问题了。。。这将是我的第一个问题 所以我最近开始研究C访问/操纵C++类。我明白,理想情况下,在正常情况下,不应该单独编译C和C++中的组件,但目前这不是一个选项。 我查阅了3个关于C中可以使用C/C++的教程,它们是: 《C++与C互操作指南》C++ 关于C++;C语言中的类访问/操作,c++,c,class,C++,C,Class,我已经读了几个星期关于堆栈溢出的问题了。。。这将是我的第一个问题 所以我最近开始研究C访问/操纵C++类。我明白,理想情况下,在正常情况下,不应该单独编译C和C++中的组件,但目前这不是一个选项。 我查阅了3个关于C中可以使用C/C++的教程,它们是: 《C++与C互操作指南》 在同一程序中混合C和C++代码 “[32]如何混合使用C和C++” 首先,我已经知道: 您必须使用extern“C”来避免 C++函数名称的修改. 您需要C兼容的回调原型 < P> G+++必须编译C++到.0文件
在同一程序中混合C和C++代码 “[32]如何混合使用C和C++”
首先,我已经知道:- 您必须使用extern“C”来避免 C++函数名称的修改.
- 您需要C兼容的回调原型
#include "foo.h"
// test.c test file for wrappers that manipulate C++ objects.
main()
{
//looks very C++ like... this makes C-Programmers cringe doesn't it?
Foo * cfoo = c_NewFoo();
Foo * cppfoo = newFoo();
//using the C-specific wrappers.
c_SetFooBar(cfoo,31415);
c_PrintFooBar(cfoo);
//using the C/C++ callback functions to Foo objects.
setFooBar(cppfoo,9001);
printFooBar(cppfoo);
}
所以我把定义分成了4个文件,就像我之前提到的。。。它编译得很好。但我不太明白
为什么太阳和SavaSIFT文章建议创建C包装器,其唯一的代码是把它的参数传递到C/C++兼容的函数上,然后调用C++特定的代码?
i、 e
从我的test.c文件中可以看到。。。我可以毫无问题地调用任意一组调用(据我所知)。包装纸是不必要的开销,还是我完全忽略了它们的要点?我唯一的猜测与C/C++的指针寻址方案有关。。。但我不确定
还有,我想除了这个还有更多的问题。。。但这三个网站是我能找到的唯一针对这个问题的网站。因此,如果我还有其他明显的疏忽,我会感谢他们的提及
提前感谢您的帮助/建议,
CX如果您有一系列不是面向对象的或位于命名空间中的函数,则无需再次包装它们。您的c_u系列函数是冗余的
任何外部C++的C++函数都有全局(即,没有命名空间/静态成员)链接,只需要C-COMPAT数据类型(通常我们使用像您这样的不透明指针),那么它不需要被包装。这就是包装功能。C++直接使用成员函数,不需要使用它们,当然也不需要被欺骗。就像我想的那样。。。但是我还是有点困惑,因为Sun和Parashift的文章中有多余的函数。而且,您忘记了DeleteFoo函数。
#include "foo.h"
// test.c test file for wrappers that manipulate C++ objects.
main()
{
//looks very C++ like... this makes C-Programmers cringe doesn't it?
Foo * cfoo = c_NewFoo();
Foo * cppfoo = newFoo();
//using the C-specific wrappers.
c_SetFooBar(cfoo,31415);
c_PrintFooBar(cfoo);
//using the C/C++ callback functions to Foo objects.
setFooBar(cppfoo,9001);
printFooBar(cppfoo);
}
//in Stuff.cpp
void CallCppStuff () { /* c++ stuff */ }
//in wrapStuff.c
wrapCppStuff() { CallCppStuff() }