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).
I found a simple solution finally, I just created a wrapper around
boost::get and then used macros to generate partial specializations of
my wrapper for handling all forward_ast, this makes for nice code and
very few changes in the compiler (thank you sed). The wrapper and macro
is here: https://github.com/wichtounet/eddic/blob/develop/include/smart_get.hpp
------------------------------------------------------------------------------
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----- iQIcBAEBCgAGBQJWyah2AAoJEMVWa2x/iEUyxpcQAIcjldobtvmHMFfflYfLYR36 WptyN9O1NNY/wcS4pLZOeNKihJUWGVXHg97guYZahUIk6x7eJvlMLDl/XYaAmhai gEtjBiWgcdqEu9XcNoIxz2ITdNvXTNRWJkOIT9AGheJx0dUsWLHg/0YX67kcXaAB 5DUdl54IPz+mJkZ5ScOstWjNi1QSdxHxiMGajhQnrOf7mThWoR/JrvEs4e+/ywKP MvmTRzIrK5UQsgaw+WsneF8y+iDCDjeCOBeLkVuzqWw80pHmn3A/NE90iqTsC1we CCjt1tH/r90G2CEftAEiO4W7gxBjbKbUw8jgieZx+dk4+rkjGju16Fd0BKDEg6aT vRM+3DJHYdJNHS1fiUXVwcqXrbndH2CFMBHuHb7zE7c74WydLn+DtkPYZD2s/+fM hzq5tjIF9pyoCcenyKl9IrMIZKOE2//zt2XOSzKueBwkTLDurt34UxbnHxVYYiT0 Z8MUukddX257sA7J6VDlP24IXutz9NdxDeRj4dGJZIuzOusIvE01xBgRCOPY8Z3m S1zeL6A0Uz1L1xNskyI/XNFdJuCm1m+aSVxnkHtkqZKE2j+KlMZLC15Ovmy31EVF Ylzh8sMTbxKk5s8othSonq5RdmnY9PA2ItlTEKb8BGiOOekoXsnxZkpkuCUhevYb mrdHaOILB/dR0+jresJj =MGb7 -----END PGP SIGNATURE-----