【发布时间】:2017-03-23 14:00:33
【问题描述】:
如何检查模板参数是否为std::vector<T>::iterator?
对于 void 类型,我们有 std::is_void。 std::vector<T>::iterator 有类似的东西吗?
【问题讨论】:
-
@W.F.
<T>在我添加之前没有出现。对此感到抱歉。我正在考虑编写自定义特征。喜欢template <template <typename T> std::vector<T> class> struct is_vec_iterator { static const bool value = true; }; -
我认为模板的全部意义在于不具体。如果您需要特定类型的特殊实现,请使用模板专业化
-
大概你可以把它当作
VecIt然后验证typename std::vector<typename std::iterator_traits<VecIt>::value_type>::iterator和VecIt命名相同的类型,但这并不能保证你得到的东西实际上是一个迭代器向量,所以没那么有用。 -
你真正想要解决的问题是什么?
-
标准允许
std::vector<T>::iterator为T*。这可能会给您设计的任何测试带来很多误报。
标签: c++ templates vector iterator