从迭代器获取const_iterator
是否有一个元函数f
将iterator
映射到其相应的const_iterator
?
即 f
应该产生 std::vector
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
是否有一个元函数f
将iterator
映射到其相应的const_iterator
?
即 f
应该产生 std::vector
。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
我不知道这样的元功能。
并非所有迭代器都有对应的 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.
我可以为
reverse_iterator
想到一些东西:使用base
成员函数decltype
,可以提取返回类型以返回到 <代码>迭代器。然而,iterator / const_iterator 没有这样的函数,因此很难看出如何实现这一点,除非提供内部 typedef 或需要显式专门化。
I can think of something for a
reverse_iterator
: using thebase
member function thedecltype
, one could extract the return type to get back to theiterator
.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.我认为您的问题的通用解决方案(并且也是可移植的解决方案是不可能的)。至少我无法想象一个:-)。
这里的难题是容器定义了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...
我认为这是不可能的,因为迭代器类型之间通常没有明确定义的映射。例如,两个容器可以共享非常量迭代器类型,但具有不同的常量迭代器。通常,您只能从容器类型映射到迭代器类型,而不能在迭代器类型之间或从迭代器类型映射到容器类型。
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.