$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: [boost] [variant] match()
From: Eelis (eelis_at_[hidden])
Date: 2015-01-07 03:41:04
Boost.Variant provides access through get() and visitors, but in C++11 we can do so much better! :)
For a boost::variant<A,B,C>, the attached small utility function match() lets you write:
match(v,
[](A & a){ cout << "it's a A!"; }
[](B & b){ cout << "oh, a B!"; }
[](C & c){ cout << "ah yes, a C!"; });
Return values are supported. I think this really belongs in Boost. It makes variants much more usable.
Regards,
Eelis
P.S. I have not attempted a C++98 implementation.
P.S.2. Right after finishing my implementation, I discovered another, /vastly/ more complex implementation of the same thing:
https://github.com/exclipy/inline_variant_visitor
I'm not sure its complexity gives that implementation any advantages.