Объявите и реализуйте перегруженную виртуальную функцию для каждого типа в аргументах шаблона - PullRequest
0 голосов
/ 20 апреля 2019

Я объявил набор перегруженных виртуальных функций для каждого из типов в списке аргументов шаблона:

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;
};

Возможно ли автоматически генерировать эти реализации?

1 Ответ

1 голос
/ 20 апреля 2019

Могу ли я предложить небольшую переработку кода?Я не совсем уверен, что вы пытаетесь сделать.несколько раз по иерархии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...