gpt4 book ai didi

c++ - 如何创建异构对象的集合

转载 作者:行者123 更新时间:2023-11-30 03:25:35 31 4
gpt4 key购买 nike

我想创建一个异构对象的集合; IE。不同类型的对象。

当这些对象具有相似的功能(包括成员)但不是从同一父类派生时,这将很有用。

一个完美的例子是随机数引擎:minstd_randmt19937ranlux24 都是引擎。它们具有相同的成员(例如调用运算符 ()),但不是从公共(public)“引擎”类派生的,因此属于不同类型。

随机数分布也是如此。

如果有一个共同的根类“引擎”,我可以很容易地创建这些对象的 vector ,如下所示:

vector<Engine> engines {minstd_rand, mt19937, ranlux24};

完成此操作后,我可以在循环中调用一个函数,如下所示:

/// Generate 10 random numbers.
void gen(vector<Engine>& engines)
{
for (auto& e : engines)
for (int i = 0; i < 10; i++)
cout << e() << endl;
}


int main()
{
gen(engines); /// Invocation
}

但是,我不能这样做。

如果我使用一个元组来包装每个引擎,每个对象都会有不同的类型:

tuple<type1>, tuple<type2>, .... 

同样,类型将是异构的,我无法创建它们的集合。

所以问题是,是否可以创建异构对象的集合,如果可以,如何创建?

最佳答案

您可以使用 vector<function<size_t ()>>来容纳这些引擎。

using Engine = function<size_t ()>;
vector<Engine> engines = {minstd_rand{}, mt19937{}, ranlux24{}};
for (auto &e : engines) {
cout << e() << endl;
}

关于c++ - 如何创建异构对象的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48960021/

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