是否可以使用mpl :: map初始化符号解析器?

肯特

如果我有一个mpl :: map,如何生成相应的boost :: spirit :: symbol解析器?

例子:

using blocks = mpl::map<
                  mpl::pair<mpl::string<'p'>, do_para>,
                  mpl::pair<mpl::string<'ul'>, do_ul>,
                  mpl::pair<mpl::string<'ol'>, do_ol>
               >;

 qi::symbols<const char *, T> block_parser(?????);

感谢您对最小代码问题的帮助!

不知道为什么要这样做,这是一个使用boost::fusion::for_each以下方法的想象中的应用程序

Live On Coliru

#include <boost/mpl/map.hpp>
#include <boost/mpl/for_each.hpp>
#include <boost/mpl/string.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/fusion/algorithm.hpp>
#include <boost/fusion/mpl.hpp>

namespace mpl = boost::mpl;
namespace qi = boost::spirit::qi;

struct do_ol   : qi::grammar<const char*> {
    do_ol() : do_ol::base_type(start) {}
    qi::rule<const char*> start;
};
struct do_ul   : qi::grammar<const char*> {
    do_ul() : do_ul::base_type(start) {}
    qi::rule<const char*> start;
};
struct do_para : qi::grammar<const char*> {
    do_para() : do_para::base_type(start) {}
    qi::rule<const char*> start;
};

template <typename T>
struct block_parser_t : qi::symbols<char, T> {

    template <typename Map>
    void add_map() {
        boost::fusion::for_each(Map(), map_adder(*this));
    }

  private:
    struct map_adder {
        map_adder(block_parser_t& r) : _r(r) {}
        block_parser_t& _r;

        template <typename...> struct result { typedef void type; };

        template <typename Pair> void operator()(Pair const&) const { 
            std::cout << "Adding: " << mpl::c_str<typename Pair::first>::value << "\n";
            _r.add(
                mpl::c_str<typename Pair::first>::value,
                typename Pair::second()
            );
        }
    };
};

int main() {
    using blocks = mpl::map<
        mpl::pair<mpl::string<'p'>,  do_para>,
        mpl::pair<mpl::string<'ul'>, do_ul>,
        mpl::pair<mpl::string<'ol'>, do_ol>
    >;

    typedef qi::rule<char const*> R;

    block_parser_t<R> block_parser;
    block_parser.add_map<blocks>();
}

印刷

Adding: p
Adding: ul
Adding: ol

它会默认构造do_uldo_oldo_para语法(假定他们是语法)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在WPF / MVVM中不使用依赖项解析器来初始化嵌套视图(和ViewModel)

来自分类Dev

是否可以使用便捷初始化程序覆盖指定的初始化程序?

来自分类Dev

是否可以使用JavaCC解析器解析String并对其应用分配法则?

来自分类Dev

是否可以使用Goutte解析JSON?

来自分类Dev

是否可以使用Goutte解析JSON?

来自分类Dev

是否可以使用其他视图解析器?

来自分类Dev

是否可以使用True初始化布尔值?

来自分类Dev

是否可以使用条件选择的字符串文字初始化字符数组?

来自分类Dev

是否可以使用HTML5数据属性初始化Bootstrap 3 Datepicker?

来自分类Dev

是否可以使用lambda初始化变量(删除副本ctor时)?

来自分类Dev

是否可以使用True初始化布尔值?

来自分类Dev

是否可以使用初始化列表在复制构造期间初始化向量的值数组?

来自分类Dev

是否可以使用键列表实例化Map?

来自分类Dev

我可以使用null初始化迭代器吗?如果不是,为什么?

来自分类Dev

是否可以使用ghc箭头符号重写此示例?

来自分类Dev

LibreOffice Basic是否可以使用无符号长类型?

来自分类Dev

Nautilus:是否可以使用Nautilus更改符号链接?

来自分类Dev

是否可以使用ItemLoaders解析HTML节点?

来自分类Dev

是否可以使用DI容器解析我的ClaimsAuthorizationManager

来自分类Dev

我可以使用条件初始化数组吗?

来自分类Dev

@之前可以使用它进行初始化

来自分类Dev

是否可以使用map定义文件夹?

来自分类Dev

是否可以使用SignalR更新Google Map中的标记?

来自分类Dev

是否可以使用.map()从对象数组创建对象?

来自分类Dev

是否可以使用map定义文件夹?

来自分类Dev

是否可以使用参数化通用内部类?

来自分类Dev

是否可以使用unicode列实例化DataFrame?

来自分类Dev

是否可以使用参数化通用内部类?

来自分类Dev

是否可以使用Python进行IE自动化?

Related 相关文章

  1. 1

    如何在WPF / MVVM中不使用依赖项解析器来初始化嵌套视图(和ViewModel)

  2. 2

    是否可以使用便捷初始化程序覆盖指定的初始化程序?

  3. 3

    是否可以使用JavaCC解析器解析String并对其应用分配法则?

  4. 4

    是否可以使用Goutte解析JSON?

  5. 5

    是否可以使用Goutte解析JSON?

  6. 6

    是否可以使用其他视图解析器?

  7. 7

    是否可以使用True初始化布尔值?

  8. 8

    是否可以使用条件选择的字符串文字初始化字符数组?

  9. 9

    是否可以使用HTML5数据属性初始化Bootstrap 3 Datepicker?

  10. 10

    是否可以使用lambda初始化变量(删除副本ctor时)?

  11. 11

    是否可以使用True初始化布尔值?

  12. 12

    是否可以使用初始化列表在复制构造期间初始化向量的值数组?

  13. 13

    是否可以使用键列表实例化Map?

  14. 14

    我可以使用null初始化迭代器吗?如果不是,为什么?

  15. 15

    是否可以使用ghc箭头符号重写此示例?

  16. 16

    LibreOffice Basic是否可以使用无符号长类型?

  17. 17

    Nautilus:是否可以使用Nautilus更改符号链接?

  18. 18

    是否可以使用ItemLoaders解析HTML节点?

  19. 19

    是否可以使用DI容器解析我的ClaimsAuthorizationManager

  20. 20

    我可以使用条件初始化数组吗?

  21. 21

    @之前可以使用它进行初始化

  22. 22

    是否可以使用map定义文件夹?

  23. 23

    是否可以使用SignalR更新Google Map中的标记?

  24. 24

    是否可以使用.map()从对象数组创建对象?

  25. 25

    是否可以使用map定义文件夹?

  26. 26

    是否可以使用参数化通用内部类?

  27. 27

    是否可以使用unicode列实例化DataFrame?

  28. 28

    是否可以使用参数化通用内部类?

  29. 29

    是否可以使用Python进行IE自动化?

热门标签

归档