"class VARIABLE"模板类的变量声明?

"class VARIABLE" in declaration of variable for template class?

本文关键字:变量 声明 class VARIABLE      更新时间:2023-10-16

最近,我看到一个不熟悉的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的表达式、术语和因子变量。奇怪的是阶级表达。例如部分。我从来没有见过这样的语句。

当声明模板类的变量时,指定了'a type'作为模板参数,所以我可以猜测'class expression'意味着某种类型。然而,表达式是变量的名称,而关键字"类"的组合,即"类表达式"似乎很尴尬。此外,在实例化x3::rule时还没有声明变量'expression'。它是否类似于使用变量名的前向声明?

请告诉我这些声明是如何工作的,如果有的话,请告诉我这些声明的术语。

考虑以下语句:

x3::rule<class expression> const expression("expression");

class expression 声明一个新的类型(expression),并使用它作为rule<>模板的模板参数。它通常被称为临时类型,因为它不会在其他地方使用(类型是不完整的)。

  • 在您的示例中,expression, termfactor都有不同的类型。
  • 在c++中,变量可以与类型具有相同的名称,这就是作者在这里所做的。

下面是一个简单的示例:

template<class T>
class rule
{
    public:
       std::string rules;  
};
int main(int argc, char** argv) {
  rule<class myexpression> myexpression;
  rule<class myexpression2> myexpression2;
  myexpression.rules = "hello";
  myexpression2.rules = "hello2";
  return 0;
}