1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
template <typename EVENT>
class Mediator {
template <typename, int, typename = void> struct friend_traits { struct type{}; };
template <typename T> struct friend_traits<StaffCommand, 0, T> {using type = Worker;};
template <typename T> struct friend_traits<StaffCommand, 1, T> {using type = Guard;};
template <typename T> struct friend_traits<StaffCommand, 2, T> {using type = Maid;};
template <typename T> struct friend_traits<StaffCommand, 3, T> {using type = Sultan;};
template <typename T> struct friend_traits<BattleCommand, 0, T> {using type = Guard;};
template <typename T> struct friend_traits<MealCommand, 1, T> {using type = Maid;};
template <typename T> struct friend_traits<MealCommand, 0, T> {using type = Sultan;};
friend typename friend_traits<EVENT, 0>::type;
friend typename friend_traits<EVENT, 1>::type;
friend typename friend_traits<EVENT, 2>::type;
friend typename friend_traits<EVENT, 3>::type;
};
|