我有一个模板结构,它接受模板参数的Iterator类型。 现在我需要为不同容器的迭代器专门化该类。 我试过用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':在部分特化中未使用或可推导的模板参数
有人可以告诉我为什么这不起作用?以及如何使其发挥作用?
答案 0 :(得分: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
是你想要匹配的东西,即使有一个,也就是没有理由说它会是独特的。