繁体   English   中英

类型衰减Stl迭代器

[英]Type decaying stl iterator

假设我有一个返回值范围的接口。 该接口的实现可以使用不同的容器来提供这些数字。

class MyClassI
{
public:
  virtual std::pair<std::vector<int>::iterator, std::vector<int>::iterator> Numbers() const = 0;
}

class MyClassC : public MyClassI
{
public:
  virtual std::pair<std::vector<int>::iterator, std::vector<int>::iterator> Numbers() const 
     { return std::make_pair(numbers.begin(), numbers.end(); }
private:
   std::vector<int> numbers;
}

我想知道是否有一种方法可以使容器类型远离迭代器。

class MyClassI
{
public:
  virtual std::pair<decayed_iterator<int>, decayed_iterator<int>> Numbers() const = 0;
}

我当然可以将原始迭代器放在堆上,并且可以使用模板类包装该指针,以将值类型作为迭代器提供。

我想知道是否已经有一些类似的东西在助推器中或者是在自己身上。

我可以想象像std / boost函数之类的东西,其中可调用项被衰减(如果它是函数或结构),并且“ state”部分(如果足够小)存储在对象内部,以避免堆分配-如果可能的话。

似乎已经有了答案。 “ Range”库提供了一个范围适配器(boost :: adaptors :: type_erased),它可以衰减容器或其他已经应用的适配器。 因此,我们最终得到一个boost :: any_range,它在迭代类型旁边还有其他一些参数,但是容器不再

https://www.boost.org/doc/libs/1_69_0/libs/range/doc/html/range/reference/adaptors/reference/type_erased.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM