That's how I did it before C++ existed. Structs with pointers to functions (which is conceptually what C++ classes are).
Yarp, I do the same. It's rudimentary but works fine and the code is clean enough if you pick a couple conventions (starting "private" variables with an underscore for example) and stick with them.