Typed selection set for keeping track of an externally provided key type KeyType is what is stored within the selection set (ie, an FObjectKey, TWeakPtr or int32) MixinType is the type of the derived class. This allows for compile-time injection of OnSelect/OnDeselect behavior without needing virtual function calls: bool OnSelectItem(const KeyType&){ return true; } void OnDeselectItem(const KeyType&){}