Re: x3::variant vs boost::variant

Baptiste Wicht <[email protected]>
Newsgroups gmane.comp.parsers.spirit.general
Message-ID <[email protected]>
On Sun, Feb 21, 2016 at 09:55:02AM +0800, Joel de Guzman wrote:
> On 2/20/16 5:14 PM, Baptiste Wicht wrote:
> > On Sat, Feb 20, 2016 at 05:42:14AM +0800, Joel de Guzman wrote:
> >> On 2/18/16 4:48 AM, Baptiste Wicht wrote:
> >>
> >>> The main problem that remains is with x3::variant and x3::forward_ast:
> >>>
> >>> I have a type like this:
> >>>
> >>>       using Type = boost::spirit::x3::variant<
> >>>               SimpleType,
> >>>               boost::spirit::x3::forward_ast<ArrayType>,
> >>>               boost::spirit::x3::forward_ast<TemplateType>,
> >>>               boost::spirit::x3::forward_ast<PointerType>
> >>>           >;
> >>>
> >>> And a lot of code resembling this:
> >>>
> >>>       if(auto* ptr = boost::get<ast::SimpleType>(&type)){
> >>>           //Do something on *ptr
> >>>       } else if(auto* ptr = boost::get<ast::ArrayType>(&type)){
> >>>           //Do something on *ptr
> >>>       } else if(auto* ptr = boost::get<ast::PointerType>(&type)){
> >>>           //...
> >>>       }
> >>>       //...
> >>>
> >>> But this does not work since ArrayType is not a member of the variant
> >>> because of the forward_ast and I have an error from boost strict_get.
> >>>
> >>> I really have a lot of code like this, I won't be able (neither have the
> >>> motivation for it) to change all of it. If there is no simple solution,
> >>> I'll use my old AST with boost::variant and recursive_wrapper.
> >>>
> >>> Is there anything I can do to use boost::get with forward_ast ?
> >>
> >> There should be a solution. tell you what. Give me a minimal test
> >> case and I can work on getting it compile and run as expected.
> >
> > Here it is: http://coliru.stacked-crooked.com/a/641b689346ff322c
>
> There is a solution, but it involves some meta code that can slow down CT.
> I'm not sure if it's worth it. The only reasonable solution is to simply
> get<forward_ast<T>>(v).

Too bad, tt makes for really inelegant code :(

I'll test the slowdown of my syntax with boost::variant instead of
x3::variant to see if it's still worth it.

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140

_______________________________________________
Spirit-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spirit-general
signature.asc (application/pgp-signature, 801 B)
-----BEGIN PGP SIGNATURE-----

iQIcBAEBCgAGBQJWyYx9AAoJEMVWa2x/iEUy9DsP/jxVaSXqwzTGeNxq/jq7HP/b
di6lVUyPJiy5B6X/vD49yZUrWijqK/x657GC8vHpoaEf0tG2WhRcd0ZfJClIHbxx
+6H4pl8NwuqGg2h8CqL2GNCEjJXap+9p+5MWnCfVlLjnJ7boKKBUI57JF7MUQ5kP
GTVgKKN8psD7p+4a1BXwbQJcMfRoF4s0hcZ41ZhIwha5p5AjyZceHTbknhRzI5np
FjUYI4bOaxboMlTskRRNskDgHiUXzAaTRtMvnEUrpdkPz7V1JvMPPpEOQNbqXa4n
ApAv6DoSY/T4lQ+Bai/t6v9uEEBJLnUaBis5mgaSYcxFVmNwe17FpqHJgedSe9+c
W2R0MwB9tz2SNZBKtN3CpfMahHxnBPYt1XhG0ocxU+hO4ozQ6+lB0CjJGbZdm4oH
A+gRLHWgT5zs3IA876yNWAZY5oSs7Ss/VmI8RyeOZNl0Otb7GgyPe39Hflv9Ivjx
F9xcWpiyxAIKklZ7Ps2R/qgH6YF5J/ZsUYtOtyo9NaxCrT7NOvxJOBXwo+70WAia
nD1r36y89PK2+cIBA59KW2J8+JTleK2RHi5uG13nBjJ4N0U8n8VaGSJv6v09UJIX
sD7S6DYKle9GZPzPiTG082W5c0MZ9GTyVe3fb5pab2M0AhDSQ+YbAjm4rwhsHfwd
9SF9iah3VpznSO0XvMPV
=Dyqw
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.