I would say either number 2 or you can do number 4 where you make the type 
parametric on the type of the move field. In the second case you can still use 
function overloading, either on functions that operate on the move type (which 
I think is a cleaner design) or on the big type parameterized on specific move 
types.

Reply via email to