代码之家  ›  专栏  ›  技术社区  ›  Aftershock

为什么这个boost::variant示例不起作用?

  •  2
  • Aftershock  · 技术社区  · 15 年前

    我开始了解boost::variant。我认为这个例子是可行的。

    #include <boost/fusion/sequence.hpp>
    #include <boost/fusion/include/sequence.hpp>
    
    #include <boost/variant/variant.hpp>
    #include <string>
    #include <vector>
    #include <iostream>
    #include <boost/variant/get.hpp>
    boost::variant< bool,long,double,std::string,
    std::vector<boost::variant<bool> > > v4;
    void main()
    {
    
        std::vector<boost::variant<bool> > av (1);
        v4= av;
        try
        {
        bool b=
        boost::get<bool> (v4[0]); // <--- this is line 20
        std::cout << b;
    
    
        }
        catch (boost::bad_get v)
        {
        std::cout << "bad get" <<std::endl; 
        }
    }
    

    我得到一个编译错误:

    d:\m\upp\boosttest\main.cpp(20):错误C2676:二进制“[”:“boost::variant”do 不定义此运算符或转换为预定义运算符可接受的类型 具有 [ BoOL, T1=长, T2=双, T3=STD:: t4=标准::矢量> ]

    1 回复  |  直到 15 年前
        1
  •  10
  •   Baffe Boyois    15 年前

    v4[0] 无效,因为v4是变量,而不是向量。你需要使用 boost::get 首先检索存储在其中的向量。所以,第20行应该是

    boost::get<bool>(boost::get<std::vector<boost::variant<bool> > >(v4)[0]);