【问题标题】:Obtaining const_iterator from iterator从迭代器中获取 const_iterator
【发布时间】:2011-07-03 14:49:50
【问题描述】:

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

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

【问题讨论】:

    标签: c++ stl iterator metaprogramming constants


    【解决方案1】:

    我可以为reverse_iterator 想到一些东西:使用base 成员函数decltype,可以提取返回类型以返回iterator

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

    【讨论】:

      【解决方案2】:

      我不知道有这样的元功能。

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

      【讨论】:

        【解决方案3】:

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

        这里的难点在于容器定义了 const_iterator 类型。要获得容器的 const_iterator 类型,您必须确定容器类型。

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2011-09-28
            • 2011-12-07
            • 2021-01-15
            • 1970-01-01
            • 2020-12-22
            • 2021-02-11
            • 1970-01-01
            • 1970-01-01
            • 2016-11-11
            相关资源
            最近更新 更多