나는 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
을 사용하면 모든 것이 잘 작동한다는 것입니다.
미리 감사드립니다.
물론, 당신 말이 맞습니다. 어리석은 내가 ... :) – stilz
한 가지 더 질문 : boost :: variant에서 문자열과 wstring을 섞고 싶을 때 어떻게해야합니까? 이 경우 wcout이 작동하지 않습니다. – stilz
지금하지 마세요. 가능하지 않을 수도 있습니다. 어쩌면 당신은 변종에 포함 된 타입에 따라'cout' 또는'wcout'에 출력 할 방문자를 만들 수 있습니다. 그러나 그것은 좋은 구문'std :: cout << v'을 허용하지 않을 것입니다. – neodelphi