Don't store cost, use union for clarity of purpose of non-common members.
Remove underscore suffix for public struct members.
performance update
Use vector as callback container.
Remove callbacks_added virtual function.  Client can call equivalent if necessary.
Comments
Abstract away matching method for child class.
Conditions enum and type
Move unit test logic to common header
Handle all or none order condition.