我有一个模板结构,它接受模板参数的迭代器类型。
现在我需要将该类专门用于不同容器的迭代器。
我尝试过 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' :在部分特化中未使用或可推导的模板参数
有人可以告诉我为什么这不起作用吗?以及如何让它发挥作用?
您无法推断出嵌套的剩余类型::
。确实,你的问题毫无意义。考虑这个更简单的反例:
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
be?
关键是没有理由any T
应该存在的Foo<T>::type
是你想要匹配的东西,即使有,也没有理由说它是独一无二的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)