如何实现数据结构,就像C 中的数组一样支持不同的类型元素

How can I implement a data structure support different types element just like an array in C++?

本文关键字:元素 一样 支持 数组 类型 实现 何实现 数据结构 就像      更新时间:2023-10-16

就像数组一样,该数据结构支持返回o(1)乘以某些索引的元素。不同类型表示内置类型和用户定义的类,该类别应使用参考。p>例如,A是使该结构降低的类。B,C是不同类的实例。A应该支持遵循以下操作:

A a(10);//apply for storage of 10 elements
a[0]=120;
a[1]=’a’;
a[2]=”adsad”;
a[3]=b;
a[3]=c;
a[1]=c;
a[2]=123.5;
…

这个问题不是用于实际用途,仅是出于好奇心。

现在我知道如何解决这个问题。真的很酷:D

您可以使用std::vectorstd::anystd::array进行此操作。

喜欢以下内容:

std::vector<std::any> many_any(10);
many_any[0] = 120;
many_any[1] = 'a';
many_any[2] = std::string("adsad");
many_any[3] = 123.5;
std::cout << std::any_cast<int>(many_any[0]) << std::endl;
std::cout << std::any_cast<char>(many_any[1]) << std::endl;
std::cout << std::any_cast<std::string>(many_any[2]) << std::endl;
std::cout << std::any_cast<double>(many_any[3]) << std::endl;

此代码输出:

 120
 a
 adsad
 123.5

这是一个实例。


std::any是一个异质容器,使用类型搜索来存储任何类型。它是C 17标准的一部分。这是一系列文章,解释了如何在c 中实现类型的文章:类型擦除 - 第一部分

重要说明:如果您确实需要std::any,则应非常仔细地考虑。因为它更像是"是的,我们可以!" 功能,这在纯形形式中很少有用。其他选项包括将对象存储在多态性设置中:使用接口(也可以使用Type-erasure也可以实现)或变体 访问者。

更新:如果您的编译器不支持C 17,您可以查看Boost的任何实现。