指定容器类型的迭代器类型的部分特化

时间:2013-04-20 17:37:20

标签: c++ templates partial-specialization

我有一个模板结构,它接受模板参数的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':在部分特化中未使用或可推导的模板参数

有人可以告诉我为什么这不起作用?以及如何使其发挥作用?

1 个答案:

答案 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是你想要匹配的东西,即使有一个,也就是没有理由说它会是独特的。