最近,我看到了一个关于C++模板的陌生语句,大致是这样的:
x3::rule<class expression> const expression("expression");
x3::rule<class term> const term("term");
x3::rule<class factor> const factor("factor");
这是 Boost.Spirit.X3 的示例源代码 (https://github.com/djowel/spirit_x3/blob/master/example/x3/calc1.cpp#L41)。
这些行似乎声明了 x3::rule 模板类的 expression、term 和 factor 变量。有趣的是,例如 <class expression> 这样的语句我从未见过。
在声明模板类变量时,需要指定“类型”作为模板参数,因此我可以猜测“class expression”表示某种类型。然而,expression 是一个变量名,加上关键字“class”,即“class expression”似乎很奇怪。此外,在实例化 x3::rule 时,变量“expression”还没有被声明。这是否像使用变量名进行前向声明?
请告诉我这些声明是如何工作的,如果有任何术语,请告诉我。