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)。