根据迭代器声明容器const或非const

汉特

假设我具有以下功能:

template <typename Iterator>
void f()
{
    std::list<int> numList;
    Iterator it = numList.begin();
    ...
}

Iterator可以是std::list<int>::iteratorstd::list<int>::const_iterator

上面的函数针对编译std::list<int>::iterator,但对于std::list<int>::const_iterator列表,应声明为const std::list<int>

是否有申报表的类型的方式或者std::list<int>还是const std::list<int>取决于是否Iteratoriterator还是const_iterator

杰克

它应该可以通过std::iterator_traits<type_traits>并且std::conditional,类似的东西

using pointer_type = typename std::iterator_traits<Iterator>::pointer;
using list_type = typename std::conditional<std::is_const<pointer_type>::value, const std::list<int>, std::list<int>>::type;

list_type numList;

请注意,这是未经测试的,因此您可能应该对其进行一些调整,这只是为了让您了解其背后的基本概念。请也检查答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章