boost::variant可以与std::string一起使用吗?

4

我用boost::variant在C++中编写了一个简单的程序,代码如下。

    #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个回答

6

问题在于wstring不能在cout中使用<<。尝试使用wcout替代。这不是一个变量的问题。


还有一个问题:当我想在boost::variant中混合使用string和wstring时,该怎么办?这种情况下,wcout无法正常工作。 - stilz
不太清楚。这可能是不可能的。也许你可以创建一个访问者来输出到 coutwcout,具体取决于 variant 中包含的类型,但这不会允许您使用漂亮的语法 std::cout << v - neodelphi

2
使用wcout而不是cout。因为你正在使用wstring,而不是string
std::wcout <<  v << std::endl;
   //^^^^ note

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接