从迭代器获取const_iterator

发布于 2024-10-18 17:35:07 字数 216 浏览 1 评论 0 原文

是否有一个元函数fiterator映射到其相应的const_iterator

f::iterator>::type 应该产生 std::vector::const_iterator

Is there a metafunction f that maps an iterator to its corresponding const_iterator?

I.e. f<std::vector<T>::iterator>::type should yield std::vector<T>::const_iterator.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

装迷糊 2024-10-25 17:35:07

我不知道这样的元功能。

并非所有迭代器都有对应的 const_iterator。例如insert_iterator。因此,这样的元功能需要决定在这种情况下要做什么。

I am not aware of such a metafunction.

Not all iterators have a corresponding const_iterator. E.g. insert_iterator. So such a metafunction would need to decide what it is going to do in such cases.

‖放下 2024-10-25 17:35:07

我可以为 reverse_iterator 想到一些东西:使用 base 成员函数 decltype,可以提取返回类型以返回到 <代码>迭代器

然而,iterator / const_iterator 没有这样的函数,因此很难看出如何实现这一点,除非提供内部 typedef 或需要显式专门化。

I can think of something for a reverse_iterator: using the base member function the decltype, one could extract the return type to get back to the iterator.

However there is no such function for iterator / const_iterator, so it's hard to see how this could be achieved, short of providing an inner typedef or requiring explicit specialization.

你曾走过我的故事 2024-10-25 17:35:07

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

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

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

对于已知的 T(s),您想要的可以实现,但是......

I think a general solution to your problem (and one that would also be portable is not possible). At least i cannot imagine one :-).

The difficult problem here is that the container defines the const_iterator type. To get to the const_iterator type for the container you have to determine the container type.

However if you start with the iterator type of the container as metafunction parameter it is not possible to retrieve the type of the container.

For known T(s) what you want can be achieved however...

‖放下 2024-10-25 17:35:07

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

I don't think this is possible since there is often no well-defined mapping between iterator types. E.g., two containers could share the non-const iterator type, but have different const iterators. In general you can only map from container types to iterator types, but not between iterator types or from an iterator type to a container type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文