向量的向量不同类型



我想构造向量的向量。这个问题已经发布了很多时间,但是我没有找到令人满意的答案。那是因为:

  • 每个向量可以具有不同的类型
  • 我不知道汇编时间的类型
  • 我不知道它将包含多少载体

基本上我希望能够在伪代码中做类似的事情以后

types = ["char", "int", "double", "int"]
container<vector> x
foreach (type in types)
{
  if (type == "char")
    x.push_back(vector<char>)
  else if (type == "int")
    x.push_back(vector<int>)
  else
    x.push_back(vector<double>)
}

,然后我希望能够做到例如

x[0].push_back("a")
x[1].push_back(1)
x[2].push_back(3.1416)

我认为boost::any可能会帮助我,但我还不熟悉Boost。

重点是,即使听起来很奇怪,这确实是我想做的。我不想要结构的向量,我真的想要一个包含不同类型的std::vector的容器(无论哪个)。原因是因为我正在阅读二进制文件。文件的标题陈述了数据次数及其类型,但可以从文件更改为另一个文件。因此,在汇编时不知道它。

也许您可以使用变体向量?

using ints = std::vector<int>;
using chars = std::vector<char>;
using doubles = std::vector<double>;
using mixed_data_t = std::vector<std::variant<chars, ints, doubles>>;

如果每个文件具有相同类型的数据,则可以在运行时找出它是什么,然后推回适当的变体向量。

如果文件混合了数据,则可以使用

std::vector<std::vector<std::variant<char, int, double>>>;

但是您必须检查每个插入。

我非常有信心boost::any不是您要寻找的解决方案,因为每次插入后都会丢失类型信息。

最新更新