如何将模板化服务传递到类中,而不在该类头中包含该服务的头文件?

问题描述 投票:0回答:1

我有一个模板类用于输入事件,它包含在应用程序核心中。我想将对象从核心传递到另一个类,而不在类的头文件中包含服务的头。

首先,这甚至可能吗?我知道我可以使用前向声明轻松地使用非模板化的类,但在这种情况下,我认为这不会起作用。

此外,由于类如何使用模板识别事件,因此无法将其抽象为基类。

我一直在考虑只是传入一个void指针,然后将它放在.cpp中它应该是什么但是从它中删除了任何安全性。

在外面,模板看起来像这样:

#include "events.h"

enum class intput_events {
    toggle_overlay,
    toggle_console,
    events_count
};

template <intput_events E, typename Listener>
using event = event_t<intput_events, E, Listener>;

using InputEventListener = event_listener<intput_events,
    event<intput_events::toggle_overlay, void(int)>,
    event<intput_events::toggle_console, void(int)>>;

其中函数签名使用匹配的枚举写入模板参数。

我不确定我想在这里做什么是可能的,或者我是不是因为它首先如何设置并且试图以我想要的方式工作而不能解决问题。

可能我只需要处理它并将其包括在内。我想我先问一下,我会感激任何帮助或见解。

c++ dependency-injection variadic-templates forward-declaration
1个回答
0
投票

正如@n.m。写了here我不是试图直接抽象它。

using InputEventListener = event_listener<intput_events,
    event<intput_events::toggle_overlay, void(int)>,
    event<intput_events::toggle_console, void(int)>>;

应该是:

class InputEventListener : public event_listener<intput_events,
    event<intput_events::toggle_overlay, void()>,
    event<intput_events::toggle_console, void(int)>> {};

这很容易让它被向前宣布。

© www.soinside.com 2019 - 2024. All rights reserved.