The interface above is largely specified using Java notation. The important issues involved in interfacing C++ are:
class Serializable { void getClassID() = 0; void getByteArray(byte* array, int &len) = 0; void readFromByteArray(byte *array, int len) = 0; void pack_int( byte* &array, int v, int &len ) { *((int*)array) = v; len -= sizeof(int); array+=len; } void pack_double( byte* &array, double v, int &len ) { *((double*)array) = v; len -= sizeof(int); array+=len; } // ... int unpack_int( byte * &array, int &len ) { int i = *((int*)array); array += sizeof(int); return i; } // ... } class MySerializableClass : public Serializable { int x, y, z; public: void getByteArray(byte* array, int &len) { pack_int( array, x, len ); pack_int( array, y, len ); pack_int( array, z, len ); } void readFromByteArray(byte *array, int len) { x = unpack_int( array, len ); y = unpack_int( array, len ); z = unpack_int( array, len ); } }