"class VARIABLE"模板类的变量声明?
"class VARIABLE" in declaration of variable for template class?
最近,我看到一个不熟悉的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
,term
和factor
都有不同的类型。 - 在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;
}
相关文章:
- 在将变量声明为引用时,堆在释放后使用
- 静态变量声明和定义
- 在变量声明中使用 for 循环
- 向量索引变量声明(size_t 或 std::vector<DATATYPE>::size_type)
- C++ 类型类的变量声明不命名类型?
- 将本地 OpenCV Mat 变量声明为静态以防止重新分配
- std::enable_if 更改成员 *变量* 声明/类型
- 在C++中,变量声明左侧的大括号是什么意思?
- 将变量声明为全局变量,然后声明为局部变量 -Shadowing-
- 命名空间内C++变量声明
- 将静态全局变量声明为内联有什么意义吗?
- 如何将一个变量声明为另一个变量的值
- 如何将迭代器变量声明为私有成员变量
- 没有变量声明为函数,但错误:二进制表达式的操作数无效
- 有没有人有书面证据来保证函数中参数的定义方式与普通变量声明相同?
- ClangTool 如何获取变量声明中模板参数的位置?
- 标准与显式自动推导变量声明
- C 静态变量声明怪异链接器错误
- 如何为数组成员变量声明 getter/setter
- 可视C++变量声明