3

我有一个模板结构,它接受模板参数的迭代器类型。现在我需要为不同容器的迭代器专门化该类。我试过 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':模板参数在部分专业化中未使用或可推导

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

4

1 回答 1

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是什么?

关键是没有理由存在任何 你想要匹配的东西,即使有,也没有理由让它是独一无二的。TFoo<T>::type

于 2013-04-20T17:42:45.413 回答