c – 提升精神:内置终端应使用哪些类型的名称?

c – 提升精神:内置终端应使用哪些类型的名称?,第1张

概述我正在重构一个使用精神进行字符串序列化的打字系统(类型模型).我正在使用类型特征的编译时建模构造. template<>type_traits<int4_type>{ typedef boost::spirit::qi::int_parser<boost::int32_t> string_parser;} template<>type_traits<string_type> 我正在重构一个使用精神进行字符串序列化的打字系统(类型模型).我正在使用类型特征的编译时建模构造.

template<>type_traits<int4_type>{    typedef boost::spirit::qi::int_parser<boost::int32_t> string_parser;}  template<>type_traits<string_type>{    typedef boost::spirit::ascii::string string_parser;}

在这个例子中,我展示了原始解析器,但我希望也可以使用规则.

int4类型有效,但这是因为(home / qi / numeric / int.hpp 27):

namespace tag    {        template <typename T,unsigned Radix,unsigned MinDigits,int MaxDigits>         struct int_parser {};    }    namespace qi    {        ///////////////////////////////////////////////////////////////////////        // This one is the class that the user can instantiate directly in         // order to create a customized int parser        template <typename T = int,unsigned Radix = 10,unsigned MinDigits = 1,int MaxDigits = -1>        struct int_parser          : spirit::terminal<tag::int_parser<T,Radix,MinDigits,MaxDigits> >         {};    }

字符串typedef不起作用,eps也不起作用.我无法弄清楚为什么要引用字符串解析器.然而,在eps的情况下,它归结为:

#define BOOST_SPIRIT_TERMINAL(name)                                             \    namespace tag { struct name {};  }                                          \    typedef boost::proto::terminal<tag::name>::type name##_type;                \    name##_type const name = {{}};                                              \    inline voID silence_unused_warnings__##name() { (voID) name; }              \    /***/

这意味着我不能输入它,它是一个proto终端构造,或者不透明地,一个const全局定义.

我的问题:我如何输入规则,语法,原语解析器?

注意:我已经开始致力于为我的所有“类型”提供封装规则的仿函数,然后将其作为类型特征.

解决方法 我不确定它是否会在所有情况下都有效,但我对typedef我的Skipper所做的是使用BOOST_TYPEOF:

typedef BOOST_TYPEOF(boost::spirit::ascii::space - (boost::spirit::qi::eol | boost::spirit::qi::eoi)) SkipperT;

所以你的例子就是

typedef BOOST_TYPEOF(boost::spirit::ascii::string) string_parser;

可能有更好/更优雅的方式,但它目前适用于我需要它.

总结

以上是内存溢出为你收集整理的c – 提升精神:内置终端应使用哪些类型的名称?全部内容,希望文章能够帮你解决c – 提升精神:内置终端应使用哪些类型的名称?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1225481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存