Я использую класс C ++ «событие», который позволял одному или двум аргументам в быть вызванными делегатами.
В последнее время я добавил поддержку для делегатов, которые не требуют аргументов, однако, когда я специализирую класс на использовании аргументов шаблона, я все равно должен добавить <> после определения класса. 1005 *
Пример использования с одним / двумя аргументами:
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
{
};