理解模板的构造函数初始值设定项的解析

Understanding parsing of constructor initializer for template

我正在努力理解 a program demonstrating boost/spirit

在以下模板定义中:

template <typename Iterator>
struct roman : qi::grammar<Iterator,unsigned()> {
    roman() : roman::base_type(start)
    {
        using qi::eps;
        using qi::lit;
        using qi::_val;
        using qi::_1;
        using ascii::char_;

        start = eps[_val = 0] >>
            (
                +lit('M')[_val += 1000]
                ||  hundreds[_val += _1]
                ||  tens[_val += _1]
                ||  ones[_val += _1]
                )
            ;
    }

    qi::rule<Iterator,unsigned()> start;
};

我正在尝试理解 : roman::base_type(start) 的含义。

我不明白的是,当 startroman 的成员时,如何用 start 初始化它,派生的 class 我们仍在构建?

来自文档中围绕示例的叙述:

  1. initialize the base grammar class by giving it the start rule (its the first rule that gets called when the grammar starts parsing)

来源:http://www.boost.org/doc/libs/1_60_0/libs/spirit/doc/html/spirit/qi/tutorials/roman_numerals.html

它正在传递对成员的引用。尽管此时尚未构造该成员,但对其的引用是有效的。如果基础 class 不取消引用引用(即只存储它或获取它的地址)那么代码是合法的......如果有点 'dangerous'.