Boost logo

Boost :

From: Stefan Slapeta (stefan_nospam__at_[hidden])
Date: 2004-12-08 10:47:51

Hartmut Kaiser wrote:
> Hi all,
> is there a means of using the binary visitation pattern provided by the
> Boost.Variant library and make the return type of the visitation process
> dependent on the types currently stored inside the visited variant object
> instances?

When I look at the current apply_visitor interface, I can't think of any:

template<typename Visitor, typename Variant>
   typename Visitor::result_type
   apply_visitor(Visitor & visitor, Variant & operand);

You would need something like the lazy function return type deduction in

struct Visitor
     template <typename Arg1, typename Arg2>
     struct result
         typedef ... result_type;



template<typename Visitor, typename Variant>
   typename Visitor::result<???>::result_type
   apply_visitor(Visitor & visitor, Variant & operand);

I really don't know if ??? (the real argument types) can be determined
at compile time.

> variant_type term1 = 1L;
> variant_type term2 = 2UL;
> variant_type term3 = -2L;
> variant_type unsigned_result =
> boost::apply_visitor(add_visitor(), term1, term2);
> variant_type signed_result =
> boost::apply_visitor(add_visitor(), term1, term3);
> Is this possible with the current implementation?

That's something different: here you assign again to a variant! Why
don't you simply use boost::variant as return type for the visitor?


Boost list run by bdawes at, gregod at, cpdaniel at, john at