> I was wanting to start out with a default class I can reuse on different projects and then
> redefine/write each function for each declaration.
> As in, define what all of them are able to do, and then add more to it.
>> If you know all the desired behaviors at compile-time you can simply pass behaviors around as closures,
>> in whatever order you like. C++ has library and core language support for higher-order programming.
>> Why is some collection (hashtable?) of KeyCommand objects not sufficient?
Yes, mbozzi's idea is sound, and should probably take care of the problem.
However, if this is very important: 'class I can reuse on different projects' and there are many classes with complex interactions between them, introducing an additional layer of abstraction that encapsulates this complexity would be very flexible.
The mediator pattern - "Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently".
https://sourcemaking.com/design_patterns/mediator
http://www.oodesign.com/mediator-pattern.html
Then we can have a concrete implementation of the mediator for each program (or for each interaction scenario within a program).