gpt4 book ai didi

c++ - 任意顺序的多个标签的模板特化

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:16 26 4
gpt4 key购买 nike

假设我有一个像这样定义的类 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...>{};

现在我希望能够在没有指定标签时专门化该类

例如:

template<typename ... Args>
class event<Args...>: event<callable_tag, mutable_tag, Args...>{};

现在这显然行不通了,因为它实际上并没有特化这个类;但我不知道该写什么而不是这个。我希望能够从带有标签的已定义类派生,这样我就不必冗余地定义运算符和方法。

这是如何实现的?

最佳答案

Now I want to be able to specialize the class for when no tags are specified

事实上,不,它不是特化而是正常情况,所以使用:

template<typename ... Args>
class event : event<callable_tag, mutable_tag, Args...>{};

Live example

关于c++ - 任意顺序的多个标签的模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26016683/

26 4 0