c++ - 当我将元素类型存储在另一个字符串 vector 中时,如何打印一个 boost::any vector ?

标签 c++ c++11 boost stl boost-any

<分区>

  • 我正在使用 boost::any vector 来存储不同的数据类型,从给定的程序文件构建符号表。
  • 我还将它们的数据类型作为字符串存储在一个单独的 vector 中。
  • 尝试使用 boost::any_cast<>() 打印 boost::any 时, 如果我将存储为字符串的数据类型作为转换类型传递,我会收到 bad_any_cast 错误。
  • 如何克服这个障碍并使用我拥有的字符串类型信息打印 vector 。

    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?
    }        
    

最佳答案

C++ 是一种静态类型语言。每个表达式都必须有一个在编译时已知的类型。

字符串(或任何非 constexpr 变量)的值在运行时 定义。因此,您不能对以字符串命名的类型执行强制转换。

any仅当您确切知道存储在该特定值中的类型时才有用。你必须在编译时知道这一点,而不是运行时。它用于在给出值的人和接收它的人之间隐藏数据类型。但不允许破坏 C++ 的静态类型规则。

没有通用的解决方案可以将任何类型存储在数组中,然后对其执行任意操作。您可以开发类似 any 的类型,这将能够使用对实际类型的多态访问来调用 operator<<在值(value)上。但是你不能从 any 之外做到这一点。 .

关于c++ - 当我将元素类型存储在另一个字符串 vector 中时,如何打印一个 boost::any vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35243509/

相关文章:

c++ - 返回一个引用,但阻止它通过包装器或其他方式存储

c++ - 为什么 boost::shared_ptr 使用 gcc 内联汇编来增加 use_count 而不是使用 operator++?

regex - Boost regex用于解析字符串中的键/值对

c++ - TurtleBot ROS 使用 Twist 移动

c++ - C++ 中的垃圾收集——为什么?

c++ - 推导引用模板参数的类型

c++ - STL优先级队列中的堆管理是否调用复制构造函数?

c++ - 堆栈分配数组的安全分配

c++ - 使用进程间映射 boost 模板错误

c++ - Arpack++ 稀疏特征求解器比等效的 Matlab eigs() 慢很多倍