假设我有以下功能:
template <typename Iterator>
void f()
{
std::list<int> numList;
Iterator it = numList.begin();
...
}
Iterator
可以是std::list<int>::iterator
或std::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
来声明列表类型iterator
或const_iterator
?
答案 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回答。