【发布时间】:2018-05-05 09:08:44
【问题描述】:
我想构造一个向量的向量。这个问题已经在 SO 上发布了很多次,但我没有找到令人满意的答案。那是因为:
- 每个向量可以有不同的类型
- 编译时不知道类型
- 我不知道它会包含多少个向量
基本上我希望能够在伪代码中做类似的事情 稍后
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 的容器(无论是哪一个)。原因是因为我正在读取二进制文件。文件的标题说明了数据的数量及其类型,但它可以从一个文件更改为另一个文件。因此在编译时无法知道。
【问题讨论】:
-
当
i不是编译时常量表达式时,静态类型语言应该如何解析x[i].push_back(...);? -
使用
boost/std::variant -
@geza:如果 OP 在编译时不知道类型,则变体将无济于事。
any会更好,但这有点设计缺陷的味道。 -
@AndyG:我认为他知道可能的类型,他只是不知道给定向量的类型。
-
@AndyG 但它闻起来有设计错误的味道。这就是为什么我对这个问题感到尴尬......
标签: c++ c++11 vector boost stl