</p>
% D- S5 t0 K* h) v) B5 u extern"C"doublecall_C_f(C*p,inti)//wrapperfunction
9 a* y/ ~" {. Q r: K8 S( ^6 W* v+ |' }, N7 Z$ K" T
{
7 {1 O& ~; k# ?; Q8 ~; z
6 ]& n Z4 G+ u% Z T- k returnp->f(i);
* ~+ Y- s, Z5 K% w8 X* i
# T1 `1 c, z4 i6 M$ K7 w6 b& N }
! y$ {/ I6 p! L( s) s
: Y+ e6 m0 {) M5 o 然后,你就可以这样调用C::f():
- r h3 U4 U# ?5 `; P$ j% e
2 O1 i" m& k0 ?( h* E /*Ccode:*/' F4 L# F" g7 a9 D: f; L% q! g
0 ?9 |4 U+ x4 V
doublecall_C_f(structC*p,inti);
, x9 w5 X' v3 h7 ^
+ Y2 a/ d" v5 T voidccc(structC*p,inti)# O2 k) Z( j) f6 N' G p% N+ R& Z
. U. _# O4 \" Y, J# p8 Y- f3 g9 V4 c {9 p' V' ~6 P8 E, O5 c
: v+ C f* T* P3 I4 R1 P
doubled=call_C_f(p,i);
$ M3 K+ f- p: g" u w8 V/ U. o
. T' A) m+ u& d7 n3 [ /*…*/
3 u; N8 b# y" s3 N" j5 K- h' m+ ?0 \" I
}" D# r" u F' F+ O+ G, U4 Q
; z0 y& G; u1 b1 q( a5 f 如果你想在C里调用重载函数,则必须提供不同名字的包装,这样才能被C代码调用。例如:
4 `, a8 }, s0 x, T4 m( k0 E
: n6 z+ W. m0 G1 G: o# K //C++code:/ U+ K/ W4 E- N
% ?$ U9 X. S5 k' {' N voidf(int);
/ k" i* @* G% a$ o- Q& {% N1 H8 Q- u3 s( @4 p
* Z( l7 |" t: T. F- p# {. s
voidf(double); |