如何检测类型是迭代器还是 const_iterator
我想知道是否有一种方法可以在编译时检查某些迭代器类型的类型 T 是否是 const_iterator。迭代器和 const 迭代器定义的类型(value_type、指针等)是否存在差异?
我想实现这样的目标:
typedef std::vector<int> T;
is_const_iterator<T::iterator>::value // is false
is_const_iterator<T::const_iterator>::value // is true
I'm wondering, if there is a way to check at compile time whether a type T of some iterator type is a const_iterator, or not. Is there some difference in the types that iterators define (value_type, pointer, ...) between iterators and const iterators?
I would like to achieve something like this:
typedef std::vector<int> T;
is_const_iterator<T::iterator>::value // is false
is_const_iterator<T::const_iterator>::value // is true
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
C++03 解决方案:
由于没有一个答案似乎正确,这是我使用 GCC 的尝试:
示例:
输出:
在线演示:http:// /ideone.com/TFYcW
C++03 Solution:
As none of the answer seems correct, here is my attempt which is working with GCC:
Example:
Output:
Online Demo : http://ideone.com/TFYcW
C++11
C++11
至少在 gcc 上有效的一种方法是通过 reference typedef:
您可以通过使用来验证它是否有效。
如果优化级别足够高,最后两个函数应减少为 return false; 和
分别返回 true;
。至少他们对我来说是这样。One method that works at least on gcc is via the reference typedef:
You can verify that it works by using
With a sufficiently high optimization level, the last two functions should be reduced to
return false;
andreturn true;
, respectively. At least they do for me.在 C++11 中,新的标准头
提供了std::is_const
,所以 Nawaz 的解决方案可以简化:
With C++11, the new standard header
<type_traits>
providesstd::is_const<T>
,so Nawaz's solution can be simplified:
这有点 hacky,因为您必须传递
T
本身,但它可以工作(模板专业化,g++ 4.4.5):像这样使用:
This is a bit hacky because you have to pass
T
itself but it works (template specialization, g++ 4.4.5):Use like this: