Я играл с вариативными параметрами шаблона, используя gcc 4.6.1. Следующий код компилируется, как ожидалось:
template<typename RetType, typename... ArgTypes>
class Event;
template<typename RetType, typename... ArgTypes>
class Event<RetType(ArgTypes...)>
{
public:
typedef function<RetType(ArgTypes...)> CallbackType;
void emit(ArgTypes...args)
{
for (CallbackType callback : callbacks)
{
callback(args...);
}
}
private:
vector<CallbackType> callbacks;
};
Но, к моему удивлению, следующая «нормальная» версия, имеющая только один «Тип аргумента», не компилируется:
template<typename RetType, typename ArgType>
class Event;
template<typename RetType, typename ArgType>
class Event<RetType(ArgType)> // <- error: wrong number of template arguments (1, should be 2)
{};
g ++ 4.6.1 выдает ошибку, как в комментарии.
Кто-нибудь знает, почему это вызывает ошибку и как заставить ее работать? Кроме того, правильно ли я думаю, что приведенный выше код является формой «частичной специализации шаблона»?