我正在使用一个 C++“事件”类,它允许将一个或两个参数称为委托。
最近我添加了对不需要参数的委托的支持,但是当我将类专门化为不使用模板参数时,我仍然需要在类定义之后添加<> 。
带有一个/两个参数的示例用法:
class Example
{
public:
event<int> SingleArgEvent;
event<int, int> DoubleArgEvent;
};
这里没有参数的例子:
class Example
{
public:
event<> NoArgTest1; // compiles just fine
event NoArgTest2; // gives me C2955: 'event' : use of class template requires template argument list
};
由于它与括号一起使用,我看不出它们应该在那里的理由。这是类专业化代码:
class null_typelist {};
/** event template **/
template <class Targ1 = null_typelist, class Targ2 = null_typelist>
class event : public event2_base<Targ1, Targ2>
{
};
template <class Targ>
class event<Targ, null_typelist> : public event1_base<Targ>
{
};
template <>
class event<null_typelist, null_typelist> : public event0_base
{
};