I have made a preliminary demo using the anonymous field feature
github.com/dontpanic92/swig
After wrapping your example C++ code, the following Go code acts the same
as C++ code:
package main
import "test5"
func test(a test5.A) {
a.M1()
}
func main() {
b := test5.NewB()
test(b)
}
It will print
A::m1
B::m2
在 2016年10月4日星期二 UTC+8下午9:47:11,Ian Lance Taylor写道:
>
> On Tue, Oct 4, 2016 at 6:33 AM, Shengqiu Li <[email protected]
> <javascript:>> wrote:
> > Thanks for your reply. In my view, the difference seems not affect the
> > behavior. As we store the pointer of the C++ object, when we call a C++
> > virtual function in Go and the object itself is an instance of child
> class,
> > calling the parent's function or the child's function are the same --
> > finally they will call the child's function in C++. For example,
>
> Here is an example showing the difference.
>
> C++ code:
>
> ====================================================
> #include <iostream>
>
> class A {
> public:
> virtual void m1() { std::cout << "A::m1\n"; m2(); }
> virtual void m2() { std::cout << "A::m2\n"; }
> };
>
> class B : public A {
> virtual void m2() { std::cout << "B::m2\n"; }
> };
>
> int main() {
> B b;
> b.m1();
> }
> =====================================================
>
> Go code:
>
> =====================================================
> package main
>
> import "fmt"
>
> type A struct{}
>
> func (a A) m1() {
> fmt.Println("A.m1")
> a.m2()
> }
>
> func (a A) m2() {
> fmt.Println("A.m2")
> }
>
> type B struct {
> A
> }
>
> func (b B) m2() {
> fmt.Println("B.m2")
> }
>
> func main() {
> var b B
> b.m1()
> }
> =================================================
>
> The C++ program will print
>
> A::m1
> B::m2
>
> The Go program will print
>
> A.m1
> A.m2
>
> Ian
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.