说我有一个类event_base
定义如此
template<typename ... Args>
class event_base{
public:
using delegate_type = std::function<void(Args...)>;
using id_type = size_t;
protected:
std::vector<std::tuple<delegate_type, id_type>> m_funcs;
};
和几个像这样定义的空标记结构
struct mutable_tag{};
struct callable_tag{};
然后我希望能够根据模板包中给出的标签中的任何一个(或两个)从该基类派生
对于单个标签:
template<class ...>
class event;
template<typename ... Args>
class event<mutable_tag, Args...>: public event_base<Args...>{};
template<typename ... Args>
class event<callable_tag, Args...>: public event_base<Args...>{};
然后是多个标签:
template<typename ... Args>
class event<mutable_tag, callable_tag, Args...>: public event<mutable_tag, Args...>, public event<callable_tag, Args...>{};
template<typename ... Args>
class event<callable_tag, mutable_tag, Args...>: public event<mutable_tag, callable_tag, Args...>{};
现在我希望能够在没有指定标签的情况下专门化该类
E.g:
template<typename ... Args>
class event<Args...>: event<callable_tag, mutable_tag, Args...>{};
现在显然不会起作用,因为它实际上并不专门化这个类;但我不知道该怎么写而不是这个。我希望能够从已经定义的带有标签的类派生,这样我就不必冗余地定义运算符和方法。
如何实现这一目标?
答案 0 :(得分:1)
现在我希望能够在没有指定标签的情况下专门化该类
事实上,不,它不是专业化而是正常情况,所以使用:
template<typename ... Args>
class event : event<callable_tag, mutable_tag, Args...>{};