2011-09-24 5 views
4

나는 boost :: variant를 사용하여 C++로 간단한 프로그램을 작성했다. 프로그램 코드는 다음과 같습니다. 내가 명령boost :: variant는 std :: string에서 작동합니까?

g++ main.cpp -o main -lboost_system 

이것을 컴파일 할 때

#include <string> 
    #include <iostream> 
    #include <boost/variant.hpp> 

    int main (int argc, char** argv) 
    { 
     boost::variant<int, std::wstring> v; 
     v = 3; 
     std::cout << v << std::endl; 
     return 0; 
    } 

는하지만 난 후보 함수의 무리 다음

/usr/include/boost/variant/detail/variant_io.hpp:64: error: no match for ‘operator<<’ in ‘((const boost::detail::variant::printer<std::basic_ostream<char, std::char_traits<char> > >*)this)->boost::detail::variant::printer<std::basic_ostream<char, std::char_traits<char> > >::out_ << operand’ 

를 얻을.

내가 무엇이 누락 되었습니까? 재미있는 점은 std::wstring 대신 std::string을 사용하면 모든 것이 잘 작동한다는 것입니다.

미리 감사드립니다.

답변

6

문제는 wstringcout에서 <<하지 않을 수 있다는 것입니다. 대신 wcout을 사용해보세요. 이 변형은 문제가되지 않습니다.

+0

물론, 당신 말이 맞습니다. 어리석은 내가 ... :) – stilz

+0

한 가지 더 질문 : boost :: variant에서 문자열과 wstring을 섞고 싶을 때 어떻게해야합니까? 이 경우 wcout이 작동하지 않습니다. – stilz

+0

지금하지 마세요. 가능하지 않을 수도 있습니다. 어쩌면 당신은 변종에 포함 된 타입에 따라'cout' 또는'wcout'에 출력 할 방문자를 만들 수 있습니다. 그러나 그것은 좋은 구문'std :: cout << v'을 허용하지 않을 것입니다. – neodelphi

2

cout이 아니라 wcout을 사용하십시오. wstring을 사용하고 있기 때문에 string이 아닙니다.

std::wcout << v << std::endl; 
    //^^^^ note 

데모 :

+0

어쩌면 알 수 있습니다. 왜 컴파일되지 않습니다 : http://pastebin.com/9W2SvLki? – stilz

관련 문제