键入衰减stl迭代器



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

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函数的东西,其中可调用的被衰减(如果它是一个函数或结构(,并且"状态"部分存储在对象内部(如果它足够小(,以避免堆分配(如果可能的话(。

看来boost已经找到了答案。"Range"库提供了一个范围适配器(boost::adapters::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

最新更新