`SWIG/Examples/go/callback/`

## Implementing C++ callbacks in Go

This example illustrates how to use directors to implement C++ callbacks in Go.

Because Go and C++ use inheritance differently, you must call a different function to create a class which uses callbacks. Instead of calling the usual constructor function whose name is `New` followed by the capitalized name of the class, you call a function named `NewDirector` followed by the capitalized name of the class.

The first argument to the `NewDirector` function is an instance of a type. The `NewDirector` function will return an interface value as usual. However, when calling any method on the returned value, the program will first check whether the value passed to `NewDirector` implements that method. If it does, the method will be called in Go. This is true whether the method is called from Go code or C++ code.

Note that the Go code will be called with just the Go value, not the C++ value. If the Go code needs to call a C++ method on itself, you need to get a copy of the C++ object. This is typically done as follows:

>     type Child struct { abi Parent }
>     func (p *Child) ChildMethod() {
>     	p.abi.ParentMethod()
>     }
>     func f() {
>     	p := &Child{nil}
>     	d := NewDirectorParent(p)
>     	p.abi = d
>     	...
>     }

In other words, we first create the Go value. We pass that to the `NewDirector` function to create the C++ value; this C++ value will be created with an association to the Go value. We then store the C++ value in the Go value, giving us the reverse association. That permits us to call parent methods from the child.

To delete a director object, use the function `DeleteDirector` followed by the capitalized name of the class.

- example.h. Header file containing some enums.
- example.i. Interface file.
- runme.go. Sample Go program.