Re: x3::variant vs boost::variant
Joel de Guzman <[email protected]>
| Newsgroups | gmane.comp.parsers.spirit.general |
|---|---|
| Message-ID | <[email protected]> |
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).
Regards,
--
Joel de Guzman
http://www.ciere.com
http://boost-spirit.com
http://www.cycfi.com/
------------------------------------------------------------------------------
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