我目前正在实现一个通用事件类。事件处理程序有一个 sender 参数和可变数量的事件参数。所以事件类的声明如下:
template<typename SENDER , typename... ARGS>
class event;
为了允许某些实现细节,我需要一个事件的 CRTP,如下所示:
template<typename SENDER , typename... ARGS>
class event : public CRTPBase<event<SENDER,ARGS...>> { ... };
并且 CRTP 基础需要知道事件参数。所以我尝试了一个模板模板参数:
template<typename SENDER , template<typename SENDER , typename... ARGS> class EVENT, typename ARGS>
class CRTPBase { ... };
但这不起作用(我使用的是 GCC 4.8.1)。
那么:提取 CRTP 参数的可变参数和非可变参数模板参数的最佳方法是什么?
编辑:另一种方法是直接通过 CRTP 模板 ( template<typename EVENT , typename EVENT_SENDER , typename... EVENT_ARGS> class CRTPBase;
) 提供事件参数,但我认为有一种方法可以直接执行此操作,而无需以显式方式编写参数。