Ниже тоже самое на Go, но без карты методов, а хотелось бы как-то красивее:
package main
import "fmt"
// Test structure
type Test struct {
a int8
b int8
opcodes [2]func() int8
}
func (t *Test) add() int8 {
return t.a + t.b
}
func (t *Test) sub() int8 {
return t.a - t.b
}
// Init properties
func (t *Test) Init(a, b int8) {
t.a = a
t.b = b
// Вручную заполняем указатели на методы
t.opcodes[0] = t.add
t.opcodes[1] = t.sub
return
}
// Call method by ID
func (t *Test) Call(fnID int8) int8 {
fn := t.opcodes[fnID]
if fn == nil {
panic(`Empty command`)
}
r := fn()
return r
}
func main() {
t := new(Test)
t.Init(2, 5)
fmt.Println(t.Call(0x00), t.Call(0x01))
}
UPD: Убрал switch, добавил массив. Соотвественно вопрос: можно ли сделать так, чтобы при создании экземпляра, автоматом заполнялся массив Test.opcodes указателями на методы