【发布时间】:2011-09-28 23:18:42
【问题描述】:
我想写一个从iterator返回对应const_iterator的元函数
template <class Iterator>
struct get_const_iterator
{
typedef ??? type;
};
-
get_const_iterator<int*>::type必须是const int* -
get_const_iterator<const int*>::type必须是const int* -
get_const_iterator<int* const>::type必须是const int*或const int* const,我不在乎 -
get_const_iterator<std::list<char>::iterator>::type必须是std::list<char>::const_iterator
等等
可以使用iterator_traits 还是不使用它们?
编辑: 假设如果 2 个容器具有相同的 iterator 类型,那么它们也具有相同的 const_iterator 类型。我认为这是一个合理的假设,尽管理论上并不完全正确。
【问题讨论】:
-
我认为您要求的通信没有明确定义。原则上,虽然这将是一个奇怪的实现,
vector<int>::iterator和list<int>::iterator可以是同一个类(不符合单一责任原则的情况如何?),但vector<int>::const_iterator和list<int>::const_iterator可以是不同的类。跨度> -
@Fred: 嗯.. 可能的骗子问是否有一个,而不是如何写一个:)
-
@Armen:实际问题是否可以通过驱动底层迭代器并构造对元素的所有引用的包装器来解决,而不是告诉您任何特定容器使用的实际类型作为其
const_iterator?实际上有几个包装器,因为您想在迭代器标签上进行调度。
标签: c++ templates stl iterator template-meta-programming