http://www.parashift.com/c%2B%2B-faq/cpp-objs-passed-to-c.html
答案分为两部分。我猜第一部分是直到代码结束。
对于第一部分,我看到的是作者正在使用“C”链接指令(extern“C”)用于用 C 编写的函数或由 C 函数调用的 C++ 函数(见下文),所以链接会没问题.
extern void c_function(Fred*); // c function
extern Fred* cplusplus_callback_function(Fred*); // c++ function
这是有道理的。
然后 Fred* 从 main() 一直传递到 c_function() [我猜这就是作者/常见问题解答关于将 C++ 对象传递给 C 函数的说法],然后到 cplusplus_callback_function() [对象从 C 传递回 C++ 域功能]。
所以第一个问题,我是否正确理解了上述内容?所以常见问题的答案只是“传递一个指针”对象?
第二个问题,作者在代码迷路后解释了什么。他突然谈到比较指针是否相等,基数和派生之间的指针转换等。他想说什么?那个指针在被传递给 c_function 之后就失去了它所有的魔力?如果它是指向派生类的基类指针,如果它传递给 C++ 函数而不是 C 函数,我们可以做更多的事情吗?
最后一个问题,我想我不知道 C++ 代码是否包含在 extern "C" 指令中,唯一改变的是链接,但没有别的?C++ 代码仍然是 C++,对吧?如果我用 C++ 编写所有代码,但故意将一些函数包装在 extern "C" 中,我会失去什么?