gpt4 book ai didi

c++ - 如何检测类型是迭代器还是 const_iterator

转载 作者:IT老高 更新时间:2023-10-28 22:33:13 26 4
gpt4 key购买 nike

我想知道,是否有办法在编译时检查某个迭代器类型的类型 T 是否为 const_iterator。迭代器定义的类型(value_type、pointer、...)在迭代器和 const 迭代器之间是否存在一些差异?

我想实现这样的目标:

typedef std::vector<int> T;

is_const_iterator<T::iterator>::value // is false
is_const_iterator<T::const_iterator>::value // is true

最佳答案

C++03 解决方案:

由于没有一个答案似乎正确,这是我与 GCC 合作的尝试:

template<typename T>
struct is_const_pointer { static const bool value = false; };

template<typename T>
struct is_const_pointer<const T*> { static const bool value = true; };

template <typename TIterator>
struct is_const_iterator
{
typedef typename std::iterator_traits<TIterator>::pointer pointer;
static const bool value = is_const_pointer<pointer>::value;
};

例子:

int main()
{
typedef std::vector<int>::iterator it_type;
typedef std::vector<int>::const_iterator const_it_type;

std::cout << (is_const_iterator<it_type>::value) << std::endl;
std::cout << (is_const_iterator<const_it_type>::value) << std::endl;
}

输出:

0
1

在线演示:http://ideone.com/TFYcW

关于c++ - 如何检测类型是迭代器还是 const_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5423246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com