需要指向apply_visitor()返回值的示例

时间:2015-01-24 21:33:43

标签: c++ boost boost-variant

我的应用程序使用variant作为数据桶将数据从一个对象传送到另一个对象。我使用apply_visitor()提取绑定数据的例子有void operator()所以apply_visitor()本身并没有返回任何内容。

有人能指出一些例子,其中apply_visitor()返回提取的值吗?

1 个答案:

答案 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) );