注册 登录  
 加关注

网易博客网站关停、迁移的公告:

将从2018年11月30日00:00起正式停止网易博客运营
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

为着理想勇敢前进

 
 
 

日志

 
 

用BOOST_TYPEOF来定义Boost.Spirit的表达式  

2007-05-31 21:48:57|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Boost 1.34.0的typeof在VC8只有模拟方式的实现,需要先注册需要推导的类型和模板类,看到有一位朋友(http://www.realdodo.com/blog/article.asp?id=217)以为VC8没有办法用typeof。所以现在把VC8使用typeof的例子贴出来。虽然需要注册类型,还是很麻烦,不过类型只用注册一次,总比每一个表达式都要找一边嵌套表达式要好吧。

#include <boost/typeof/typeof.hpp>
#include <boost/spirit.hpp>
using namespace boost;
using namespace boost::spirit;

#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
BOOST_TYPEOF_REGISTER_TEMPLATE(chlit, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(strlit, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(difference, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE(kleene_star, 1)
BOOST_TYPEOF_REGISTER_TEMPLATE(sequence, 2)
BOOST_TYPEOF_REGISTER_TEMPLATE(alternative, 2)
BOOST_TYPEOF_REGISTER_TYPE(space_parser);
BOOST_TYPEOF_REGISTER_TYPE(anychar_parser);
              
struct skip_grammar : grammar<skip_grammar>
{
    template <typename ScannerT>
    struct definition
    {
        definition(skip_grammar const& /*self*/)
        : skip
        (
            space_p
            |   "//" >> *(anychar_p - '\n') >> '\n'
            |   "/*" >> *(anychar_p - "*/") >> "*/"
        )
        {
        }
        typedef BOOST_TYPEOF
        (
            space_p
            |   "//" >> *(anychar_p - '\n') >> '\n'
            |   "/*" >> *(anychar_p - "*/") >> "*/"
        ) skip_t;

        skip_t skip;
        skip_t const& start() const { return skip; }
    };
};

  评论这张
 
阅读(290)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018