gpt4 book ai didi

c++ - 如何返回通用迭代器(独立于特定容器)?

转载 作者:太空狗 更新时间:2023-10-29 20:32:15 25 4
gpt4 key购买 nike

我想设计一个类 Foo 来存储各种不同类型的数据并返回对它们的迭代器。它应该是通用的,因此 Foo 的用户不知道数据是如何存储的(Foo 可能正在使用 std::setstd::vector 或其他)。

我很想写这样的界面:

class Foo {
class FooImpl;
FooImpl* impl_;
public:
const Iterator<std::string>& GetStrings() const;
const Iterator<int>& GetInts() const;
};

Iterator 是这样的(类似于 .NET 中的迭代器):

template<class T>
class Iterator {
public:
const T& Value() const = 0;
bool Done() const = 0;
void Next() = 0;
};

但我知道这种迭代器在 C++ 中不是标准的,最好像 STL 那样使用迭代器,这样您就可以在它们上面使用 STL 算法。

我该怎么做? (我需要 iterator_traits 吗?)

最佳答案

你明白为什么STL选择把迭代器的实现细节放在头文件里了吗? JIT 框架能够跨编译单元内联,但 C++ 只能在编译单元内内联。内联时,遍历序列的速度要快得多,函数调用的成本在实际遍历数据结构时占主导地位。

如果您真的想隐藏实现细节,请继续。您可以创建一个与 STL 兼容的迭代器,该迭代器在 protected 虚函数方面实现了 operator++ 和 operator!= 以及 operator->,您提到的 Next、Done 和 Value 都是不错的名称。只是期望为性能较低的封装付出代价。

关于c++ - 如何返回通用迭代器(独立于特定容器)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303581/

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