[英]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,它在迭代类型旁边还有其他一些参数,但是容器不再
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.