Я играл с переменными параметрами шаблона, используя 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 выдает ошибку как в комментарии.
Кто-нибудь знает, почему это вызывает ошибку и как заставить ее работать? Кроме того, правильно ли я считаю, что приведенный выше код является формой «частичной специализации шаблона»?