Я объявил набор перегруженных виртуальных функций для каждого из типов в списке аргументов шаблона:
template<typename ... Tails>
class MessageSubscriber
{
public:
using onMessage = void;
};
template<typename Head, typyname ... Tails>
class MessageSubscriber<Head, Tails...> : public MessageSubscriber<Tails...>
{
public:
using MessageSubscriber<Tails...>::onMessage;
virtual void onMessage(Head const& t) = 0;
};
И затем я хотел бы реализовать эти виртуальные функции в производном классе с некоторым поведением по умолчанию, подобным этому:
template<typename ...Tails>
class MessageHandler : public MessageSubscriber<Tails...>
{
public:
//for each Type T in Tails
void onMessage(T const& t) override
{
m_message_queue.enqueue(t);
}
private:
SomeMessageQueue<std::variant<Tails...>> m_message_queue;
};
Возможно ли автоматически генерировать эти реализации?