boost :: variant和vector中元素的打印方法

oad*_*ams 1 c++ boost-variant

 std::vector< boost::variant<std::string, int> > vec;
 std::string s1("abacus");
 int i1 = 42;
 vec.push_back(s1);
 vec.push_back(i1);
 std::cout << vec.at(0).size() << "\n";
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此代码时,我收到以下错误:

main.cpp:68: error: ‘class boost::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>’ has no member named ‘size’
make: *** [main.o] Error 1
Run Code Online (Sandbox Code Playgroud)

但是,作为一个字符串,它应该有一个size()方法.我不确定出了什么问题.注意用最后一行替换:

std::cout << vec.at(0) << "\n";
Run Code Online (Sandbox Code Playgroud)

将按预期打印"算盘".

Kon*_*lph 6

作为一个字符串,它应该有一个size()方法

它不是string- 它是一个variant.你首先需要告诉你的编译器知道有一个string内部-即使用检索它boost::get<std::string>(vec[0]).

请务必阅读Boost.Variant教程.