我的应用程序使用variant作为数据桶将数据从一个对象传送到另一个对象。我使用apply_visitor()提取绑定数据的例子有void operator()所以apply_visitor()本身并没有返回任何内容。
有人能指出一些例子,其中apply_visitor()返回提取的值吗?
答案 0 :(得分:3)
Boost.Variant tutorial中有很多内容。
这里有一个(从技术上讲,这是二进制访问,但它是复制完整示例的最少代码量):
class are_strict_equals
: public boost::static_visitor<bool>
{
public:
template <typename T, typename U>
bool operator()( const T &, const U & ) const
{
return false; // cannot compare different types
}
template <typename T>
bool operator()( const T & lhs, const T & rhs ) const
{
return lhs == rhs;
}
};
boost::variant< int, std::string > v1( "hello" );
boost::variant< double, std::string > v2( "hello" );
assert( boost::apply_visitor(are_strict_equals(), v1, v2) );
boost::variant< int, const char * > v3( "hello" );
assert( !boost::apply_visitor(are_strict_equals(), v1, v3) );