gpt4 book ai didi

c++ - 类型衰减 STL 迭代器

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:12 26 4
gpt4 key购买 nike

假设我有一个返回值范围的接口(interface)。此接口(interface)的实现可能会使用不同的容器来提供这些数字。

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;
}

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

我想知道在 boost 中是否已经有类似的东西或者其他东西。

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

最佳答案

看来boost已经有了答案。 “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

关于c++ - 类型衰减 STL 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53691935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com