C++/变量模板
< C++
变量模板(variable template)是C++14引入的新的一个种类的模板。可用于在命名空间作用域声明一个变量。例如:
template<class T>
constexpr T pi = T(3.1415926535897932385); // variable template
template<class T>
T circular_area(T r) // function template
{
return pi<T> * r * r; // pi<T> is a variable template instantiation
}
可以在类作用域声明一个静态数据成员:
struct matrix_constants
{
template<class T>
using pauli = hermitian_matrix<T, 2>; // alias template
template<class T> static constexpr pauli<T> sigma1 = { { 0, 1 }, { 1, 0 } }; // static data member template
template<class T> static constexpr pauli<T> sigma2 = { { 0, -1i }, { 1i, 0 } };
template<class T> static constexpr pauli<T> sigma3 = { { 1, 0 }, { 0, -1 } };
};
类的静态数据成员模板,也可以用类模板的非模板数据成员来实现:
struct limits {
template<typename T>
static const T min; // declaration of a static data member template
};
template<typename T> const T limits::min = { }; // definition of a static data member template
template<class T> class X {
static T s; // declaration of a non-template static data member of a class template
};
template<class T> T X<T>::s = 0; // definition of a non-template data member of a class template
变量模板不能用作模板的模板参数(template template arguments)。