- 我使用 boost::any 的向量来存储不同的数据类型,从给定的程序文件构造符号表。
- 我还将它们的数据类型作为字符串存储在单独的向量中。
- 在尝试使用 boost::any_cast<>() 打印 boost::any 时,如果我将存储为字符串的数据类型作为强制转换类型传递,则会收到 bad_any_cast 错误。
如何克服这个障碍并使用我作为字符串的类型信息打印向量。
vector<boost::any> vany; vector<string> vtype; string vartype; vany.push_back(10); vtype.push_back("int"); vany.push_back(2.5); vtype.push_back("float"); vany.push_back("hello"); vtype.push_back("string"); for(int i=0; i<3; i++) { vartype = vtype[i]; cout<<boost::any_cast<vartype>(vany[i]); //this doesn't work, how do i make it work? }
问问题
2124 次
1 回答
4
C++ 是一种静态类型语言。每个表达式都必须有一个在编译时就知道的类型。
字符串(或任何非constexpr
变量)的值是在运行时定义的。因此,您不能对由字符串命名的类型执行强制转换。
any
仅当您确切知道该特定值中存储了哪种类型时才有用。而且您必须在编译时而不是运行时知道这一点。它用于在给出值的人和接收它的人之间隐藏数据类型。但是不允许破坏 C++ 的静态类型规则。
没有通用的解决方案可以将任何类型存储在数组中,然后对它们执行任意操作。您可以开发一个类似 的类型any
,它能够使用对实际类型的多态访问来调用operator<<
值。但是你不能从any
.
于 2016-02-06T16:45:25.847 回答