Почему этот пример надстройки не работает? - PullRequest
2 голосов
/ 02 ноября 2009

Я знакомлюсь с boost :: вариантом. Я думаю, что этот пример должен работать.

#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 :: variable 'do не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора с [ T0_ = BOOL, Т1 = долго, Т2 = двойной, T3 = станд :: строка, T4 = станд :: вектор> ]

1 Ответ

10 голосов
/ 02 ноября 2009

v4[0] недопустимо, поскольку v4 является вариантом, а не вектором. Вам нужно использовать boost::get, чтобы сначала извлечь вектор, сохраненный в нем. Итак, строка 20 должна быть

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...