我用C++編寫了一個使用boost :: variant的簡單程序。程序代碼如下。boost :: variant與std :: string一起工作嗎?
#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
時,一切都很好。
在此先感謝。
當然,你是對的。我是多麼愚蠢...... :) – stilz
還有一個問題:當我想在boost :: variant中混合字符串和wstring時該怎麼辦?在這種情況下,wcout不起作用。 – stilz
現在不要真的。這可能是不可能的。也許你可以創建一個訪問者輸出到'cout'或'wcout',這取決於變體中包含的類型,但是這不允許你使用好的語法'std :: cout << v'。 – neodelphi