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";
将按预期打印“abacus”。
最佳答案
being a string it should have a size() method
这不是 string
– 这是一个variant
.你首先需要告诉编译器你知道有一个string
内部 - 即使用 boost::get<std::string>(vec[0])
检索它.
请务必阅读 Boost.Variant tutorial .
关于c++ - vector中元素的boost::variant和打印方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5180034/