【问题标题】:Does boost::variant work with std::string?boost::variant 是否与 std::string 一起使用?
【发布时间】:2011-09-24 09:06:54
【问题描述】:

我使用 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 时,一切都很好。

提前致谢。

【问题讨论】:

    标签: c++ boost stl variant wstring


    【解决方案1】:

    问题是wstring不能是&lt;&lt;中的cout。尝试改用wcout。这不是变体的问题。

    【讨论】:

    • 还有一个问题:我想在boost::variant中混用string和wstring怎么办?在这种情况下,wcout 不起作用。
    • 现在真的不要了。这可能是不可能的。也许您可以创建一个访问者以输出到 coutwcout,具体取决于变体中包含的类型,但这不会允许您使用漂亮的语法 std::cout &lt;&lt; v
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-21
      • 2020-12-12
      • 1970-01-01
      • 2017-02-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多