boost :: variant是否适用于std :: string?

时间:2011-09-24 09:06:54

标签: c++ boost stl variant wstring

我用C ++编写了一个使用boost :: variant的简单程序。程序代码如下所示。

    #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;
    }

但是当我尝试使用命令

编译它时
g++ main.cpp -o main -lboost_system

我得到了

/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::string代替std::wstring时,一切都很有效。

提前致谢。

2 个答案:

答案 0 :(得分:6)

问题是wstring中的<<不能cout。请尝试使用wcout。这不是变体的问题。

答案 1 :(得分:2)

使用wcout,而不是cout。因为您使用的是wstring,而不是string

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

演示:http://ideone.com/ynf15