I don't think Trigger needs to be templated. Create an abstract interface Triggered that just provides the trigger() method and let the TriggeredTransition inherit from it.