【发布时间】: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
是否存在将iterator 映射到其对应的const_iterator 的元函数f?
即f<std::vector<T>::iterator>::type 应该产生 std::vector<T>::const_iterator。
【问题讨论】:
标签: c++ stl iterator metaprogramming constants
我可以为reverse_iterator 想到一些东西:使用base 成员函数decltype,可以提取返回类型以返回iterator。
但是,iterator / const_iterator 没有这样的功能,因此很难看出如何实现这一点,除非提供内部 typedef 或需要显式专门化。
【讨论】:
我不知道有这样的元功能。
并非所有迭代器都有对应的 const_iterator。例如。插入迭代器。所以这样的元函数需要决定在这种情况下它会做什么。
【讨论】:
我认为您的问题的通用解决方案(而且也是可移植的也是不可能的)。至少我无法想象一个:-)。
这里的难点在于容器定义了 const_iterator 类型。要获得容器的 const_iterator 类型,您必须确定容器类型。
但是,如果您以容器的迭代器类型作为元函数参数开始,则无法检索容器的类型。
对于已知的 T(s),您可以实现您想要的...
【讨论】:
我认为这是不可能的,因为迭代器类型之间通常没有明确定义的映射。例如,两个容器可以共享非 const 迭代器类型,但具有不同的 const 迭代器。一般来说,您只能从容器类型映射到迭代器类型,但不能在迭代器类型之间或从迭代器类型到容器类型。
【讨论】: