从迭代器中获取const_iterator

时间:2011-02-24 14:26:43

标签: c++ stl iterator metaprogramming const

是否存在将f映射到其对应的iterator的元函数const_iterator

即。 f<std::vector<T>::iterator>::type应该产生std::vector<T>::const_iterator

4 个答案:

答案 0 :(得分:4)

我不知道这样的元功能。

并非所有迭代器都有相应的const_iterator。例如。 insert_iterator。所以这样的元函数需要决定在这种情况下要做什么。

答案 1 :(得分:0)

我可以为reverse_iterator想到一些事情:使用base成员函数decltype,可以提取返回类型以返回iterator。< / p>

然而iterator / const_iterator没有这样的功能,所以很难看出如何实现这一功能,缺少提供内部typedef或需要显式专业化。

答案 2 :(得分:0)

我认为您的问题的一般解决方案(也是不可移植的问题)。至少我无法想象一个: - )。

这里的难题是容器定义了const_iterator类型。要获取容器的const_iterator类型,您必须确定容器类型。

但是,如果以容器的迭代器类型作为元函数参数开始,则无法检索容器的类型。

对于已知的T(s),您可以实现所需的......

答案 3 :(得分:0)

我不认为这是可能的,因为迭代器类型之间通常没有明确定义的映射。例如,两个容器可以共享非const迭代器类型,但具有不同的const迭代器。通常,您只能从容器类型映射到迭代器类型,但不能在迭代器类型之间或从迭代器类型映射到容器类型。