Добрый день!
Есть
код:
#include <iostream>
template<typename T, unsigned N> struct a {
T data[N];
};
template<typename T> int get() { return 0; }
template<> int get<int>() { return 1; }
template<> int get<char>() { return 2; }
template<class T, unsigned N> int get<a<T,N>>() { return 3; }
int main()
{
a<char, 10> a1;
std::cout << get<int>() << "\n";
std::cout << get<char>() << "\n";
std::cout << get<decltype(a1)>() << "\n";
}
Ругается "function template partial specialization 'get<a<T, N> >' is not allowed" на строке
template<class T, unsigned N> int get<a<T,N>>() { return 3; }
И я понимаю, потому что частичная специализация шаблоном запрещена.
А если очень надо? Как лучше тогда реализовать идею чтобы функция возвращала разные значения, в зависимости от типа специализации?