abstract_command_object
Command objects are a common pattern, so it's important to establish
a standard abstract base early on. Here it is:
class abstract_command_object {
public:
virtual ~abstract_command_object() {}
virtual void operator()() =0;
};