gpt4 book ai didi

c++ - C++ 中的迭代器和模板

转载 作者:行者123 更新时间:2023-11-28 03:01:41 25 4
gpt4 key购买 nike

我有以下层次结构。一个文件是:

vector<Dataset<here lies the problem!!!>>

然后我希望每个数据集是:

vector<Record>

但是 Record 是一个模板类型,也就是说你创建一个 Dataset 是这样的:

Dataset<Record> dataset;

我需要能够遍历数据集,然后针对每个数据集遍历记录,但我不能,因为每个数据集都有自己的不同的记录,所以基本上每个数据集都是不同的类型,我不能在一个 vector 中有不同的类型。

更多说明:

Dataset 是一个 CSV 数据集,我的意思是更多的 CSV 行。一条记录基本上是一条 CSV 行,但代表通过用户指定的结构。

这与迭代无关,因为它也与存储有关。我们可能有 20 个数据集,我们希望将它们存储在一个结构中,例如 vector 或其他结构。所以这不仅仅是关于迭代。

最佳答案

如果它们属于不同类型,迭代它们就没有意义;什么代码会在每种类型的数据集上运行?

一旦找到这个问题的答案,抽象该信息并用作接口(interface)并使数据集继承它或使用某种 TMP 类型删除。

举个例子:

class Apple { ... };
class Pear { ... };

vector<SomeTypeThatCanHoldApplesAndPears> v;
for (x : v) {
// what do you want to do with x?
}

还有一个例子可以满足:

// They are both fruits and have a color!
class Fruit { public: virtual Color getColor() = 0; }
class Apple : public Fruit { /* implement getColor */ };
class Pear : public Fruit { /* implement getColor */ };

现在只使用可以容纳Fruits 的引用包装器类型或类型删除指针的vector:

for (fruit : v) {
fruit.getColor();
}

更高级的解决方案

您可以使用 Boost.TypeErasurecreate a concept这将具有您想要的行为。

关于c++ - C++ 中的迭代器和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642624/

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