cppmintf: implements multiple intefaces in c++

This commit is contained in:
xushiwei
2024-06-23 16:12:01 +08:00
parent adeb5de19f
commit 2314c41103
4 changed files with 109 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
#include <stdio.h>
#define interface struct
interface ICalc {
virtual double calc(double v) = 0;
};
interface IVal {
virtual int val() = 0;
};
class Callback : public ICalc, public IVal {
};
extern "C" void f(Callback* cb) {
printf("val: %d\ncalc(2): %lf\n", cb->val(), cb->calc(2));
}

42
_demo/cppmintf/foo/foo.go Normal file
View File

@@ -0,0 +1,42 @@
package foo
import (
"unsafe"
)
const (
LLGoFiles = "bar/bar.cpp"
LLGoPackage = "link"
)
// -----------------------------------------------------------------------------
type ICalc struct {
Vptr *ICalcVtbl
}
type ICalcVtbl struct {
Calc unsafe.Pointer
}
// -----------------------------------------------------------------------------
type IVal struct {
Vptr *IValVtbl
}
type IValVtbl struct {
Val unsafe.Pointer
}
// -----------------------------------------------------------------------------
type Callback struct {
ICalc
IVal
}
//go:linkname F C.f
func F(cb *Callback)
// -----------------------------------------------------------------------------

Binary file not shown.