частичная специализация для типа итератора указанного типа контейнера

У меня есть структура шаблона, которая принимает тип итератора для аргумента шаблона.
теперь мне нужно специализировать этот класс для итераторов разных контейнеров.
Я пробовал с std :: vector

template<typename Iterator>
struct AC {

};

template<typename T, typename Alloc>
struct AC<typename std::vector<T, Alloc>::iterator> { //this doesn't work

};

но я получил эту ошибку компилятора (VS11):
‘T’: параметр шаблона не используется или не выводится при частичной специализации

Может кто-нибудь сказать мне, почему это не работает? И как заставить это работать?

2

Решение

Вы не можете вывести типы, оставшиеся от вложенности ::, Действительно, ваш вопрос не имеет смысла. Рассмотрим этот более простой контрпример:

template <typename> struct Foo;
template <> struct Foo<bool> { typedef float type; };
template <> struct Foo<char> { typedef float type; };

template <typename> struct DoesntWork;

template <typename T> struct DoesntWork<typename Foo<T>::type> { };

Теперь, если я скажу DoesntWork<float>, что должно T быть?

Дело в том, что нет никаких причин, по которым любой T должен существовать для чего Foo<T>::type это вещь, которую вы хотите сопоставить, и даже если бы она была, нет причины, почему она была бы уникальной.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]