gpt4 book ai didi

c++ - 为模板参数中的每种类型声明和实现重载虚函数

转载 作者:行者123 更新时间:2023-11-28 04:19:36 27 4
gpt4 key购买 nike

我为模板参数列表中的每种类型声明了一组重载虚函数:

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

是否可以自动生成这些实现?

最佳答案

我可以建议对代码进行轻微修改吗?不过,我不确定您要做什么。

template <typename Message>
class MessageSubscriber {
public:
virtual ~MessageSubscriber() = default;
virtual void onMessage(const Message &) = 0;
};

template <typename Handler, typename Message>
class MessageHandlerBase : public MessageSubscriber<Message> {
public:
void onMessage(const Message &m) override {
static_cast<Handler *>(this)->m_message_queue.enqueue(m);
}
};

template <typename... Messages>
class MessageHandler : public MessageHandlerBase<MessageHandler<Messages...>, Messages>... {
public:
template <typename, typename>
friend class MessageHandlerBase;

private:
SomeMessageQueue<std::variant<Messages...>> m_message_queue;
};

如果您保持 MessageSubscriber 的声明不变,您最终会遇到各种问题,因为沿层次结构多次继承同一个类。

关于c++ - 为模板参数中的每种类型声明和实现重载虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55772021/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com