Aşağıdaki C++ temelli işlevleri nasıl çağırılacağını açıklayan here numaralı makaleyi okudum.C kodundan C++ yöntemini çağırma
yöntem en iyi aşağıdaki örnek ile açıklanmıştır:
// 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);
/* ... */
}
Ancak, i p "ile işaret edilen bir örneği tanımlarım burada anlamak için başarısız . C kodunda, opak yapıya işaretçi olarak iletildiğini ve C++ kodunda, geçerli örnek class C
olarak kabul edildiğini fark ettim, ancak bu işaretçinin başlatıldığını görmedim.
p.s. Elbette farklı bir dille ilgili her kod bloğu uygun bir derleyici ile derlenir ve farklı bir nesne dosyası oluşturulur.
Bu yanıtın güzel bir eklentisi, C sınıfının sanal üye işlevine sahip olması nedeniyle [POD türleri] (http://en.cppreference.com/w/cpp/concept/PODType) hakkında bir paragraf olacaktır (opak bir yapının gerekliliğinin ardındaki asıl nedendir. –
Yardım için teşekkürler. Ancak Kullanım bölümünde, aramadan önce işlev tanımına sahip olmamam gerekir. tanımı 'C * create_c()' türündendir ... ama C kısmı C sınıfını tanımıyor. – Zohar81
@ Zohar81 sadece ekle 'struct C;' bildirmek için –