2009-11-02 6 views
2

나는 boost :: variant를 알게되었다. 나는이 예제가 효과가 있다고 생각한다.왜이 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 : 이진 '[': '부스트 :: 변형'할 ES 이것은 운영자 또는 [ T0_ = BOOL, T1 = 긴 T2 = 더블 T3 = 표준 : 문자열 T4 = 표준 : 벡터>와 미리 정의 된 연산자 으로 허용 가능한 형태로 전환을 정의하지 ]

+0

을해야 하는가? 단일 유형 변형은 쓸모가 없습니다. – alexk7

+0

사실, 방금 실험했습니다. – Aftershock

답변

10

v4[0]은 유효하지 않습니다. 왜냐하면 v4는 변형이 아니고 벡터가 아니기 때문입니다. 먼저 boost::get을 사용하여 벡터에 저장된 벡터를 검색해야합니다. 따라서, 라인 (20)은 왜 부스트 :: 변형 을 사용합니까

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

+1

어! 그 사람 못 생겼어! – JRL

+9

'std :: vector >'에 대한 typedef는 약간 도움이됩니다. 변종 벡터의 변종을 사용하여 더 많은 도움이 :) –

+2

주제 - 시동, 난 당신 typedefs를 사용하는 것이 좋습니다. 내 노트에 실례하지만, const 참조, 즉 try {/ ** /} catch (const boost :: bad_get & v) {/ ** /}에서 예외를 잡는 것이 낫다. – varnie

관련 문제