我讀過以下文章here,它解釋瞭如何從純C代碼調用基於C++的函數。從C代碼調用C++方法
的方法最好用下面的例子說明:
// C++ code:
class C {
// ...
virtual double f(int);
};
extern "C" double call_C_f(C* p, int i) // wrapper function
{
return p->f(i);
}
/* C code: */
double call_C_f(struct C* p, int i);
void ccc(struct C* p, int i)
{
double d = call_C_f(p,i);
/* ... */
}
然而,我不明白如果我在哪裏定義由「P」指出一個實例。請注意,在C代碼中,它是作爲指向不透明結構的指針提供的,並且在C++代碼中它假定爲指向class C
的有效實例的指針,但我沒有看到該指針正在被初始化的位置。
p.s. 當然,與不同語言相關的每個代碼塊都用適當的編譯器編譯,並創建不同的目標文件。
這個答案的一個很好的附加功能是關於[POD類型]的一個段落(http://en.cppreference.com/w/cpp/concept/PODType),因爲C類具有虛擬成員函數(防止它成爲POD)是背後需要一個不透明結構的真正原因。 –
感謝您的幫助。但在Usage部分中,我不應該在調用之前先定義函數。定義是從類型'C * create_c()'...但C部分不識別類C. – Zohar81
@ Zohar81只需添加'struct C;'來聲明它 –