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

 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";
当我尝试运行此代码时,我收到以下错误:
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
但是,作为一个字符串,它应该有一个size()方法。我不确定出了什么问题。注意用最后一行替换:
std::cout << vec.at(0) << "n";
将按预期打印“算盘”。     
已邀请:
  作为一个字符串,它应该有一个size()方法 这不是一个
string
- 它是一个
variant
。首先需要告诉编译器你知道里面有一个
string
- 即使用
boost::get<std::string>(vec[0])
检索它。 请务必阅读Boost.Variant教程。     
你需要获得这个变体的第一种类型(这是字符串),你用
vector::at()
访问的类
boost::variant
没有名为
size()
的方法,尝试类似::
boost::get<0>(vec.at(0)).size(); // I think that's the syntax....
    

要回复问题请先登录注册