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

时间:2015-09-06 15:10:10

标签: c++ c++11 stl iterator

假设我有以下功能:

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>还是Iterator来声明列表类型iteratorconst_iterator

1 个答案:

答案 0 :(得分:3)

应该可以使用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;

介意这是未经测试的,所以你应该稍微调整一下,这只是为了给你背后的基本想法。请检查this回答。