如何克服这个障碍并使用我所拥有的字符串信息打印矢量。
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?
}
答案 0 :(得分:4)
C ++是一种静态类型语言。每个表达式都必须具有编译时所知的类型。
字符串(或任何非constexpr
变量)的值在运行时中定义。因此,您无法对由字符串命名的类型执行强制转换。
any
仅在您确切知道该特定值中存储的类型时才有用。你必须在编译时而不是运行时知道这一点。用于在发出价值的人和接收价值的人之间隐藏数据类型。但它不允许打破C ++的静态类型规则。
没有通用的解决方案能够在数组中存储任何类型,然后对它们执行任意操作。您可以开发类似any
的类型,它可以使用对实际类型的多态访问来调用值operator<<
。但你不能在any
之外做到这一点。