假设我具有以下功能:
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
?
它应该可以通过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] 删除。
我来说两句