【发布时间】:2021-06-16 22:28:11
【问题描述】:
我试图从更深层次的概念中理解 C++ 模板元编程。我不明白的是模板的真正含义。具体来说,具有静态成员的模板类的习语是什么。举个例子:
template <class T>
class Matrix {
private:
public:
static constexpr Matrix<T> Identity(int,int);
static constexpr Matrix<T> Zero(int,int);
static constexpr Matrix<T> Null = Matrix();
typdef value_type;
Matrix();
Matrix(int,int);
}
Matrix 的静态成员函数显然构造了典型的矩阵。我的想法是思考文本(习语)Matrix<T>::Identity 的方式将是 一个类的身份矩阵 value_type = T。
TL;DR
重申一下,我相信上面的模板会生成一组 类,其中包含各自的“类型”静态成员 Matrix<T>::Identity。这与一些Matrix::Identity<T>() 的其他直观语义相比,这将是所有矩阵的T 类型的标识。哪个是正确的?
【问题讨论】:
-
模板就是食谱。当您执行
Matrix<int>时,它会获取您的模板并标记一个版本,在该版本中它将所有出现的T替换为int。 -
我不知道这被称为成语。它就像一个带有静态方法的普通类,只是你可以从模板中实例化许多不同的类
-
Matrix是一个类模板。对于给定的T,Matrix<T>是一个类。Matrix<T>::Identity是类Matrix<T>的静态类函数,Matrix<T>::Null是类的静态成员。Matrix::Identity<T>不是一个东西,尽管可以有非模板类的模板成员,并且它们会有那种语法。 -
TY,编辑了评论。
-
@molbdnilo“并非所有模板编程都是元编程”?一些模板编程当然是元 ;)
标签: c++ class templates member