变量模板(Variable Template) 是 C++14 引入的一项特性,它允许你定义一个模板化的变量(或静态数据成员),其类型和/或值可以随模板参数变化。简单来说,你可以为一系列相关的常量或变量创建一个通用的模板定义,而不必为每种类型单独编写重载或特化。
核心概念与语法
-
是什么:变量模板定义了一个变量族(a family of variables)。当模板参数被具体化时,就实例化出一个具体的变量。
-
为什么用:它特别适合定义类型相关的常量(如 pi 对 float、double 取不同精度)、类型特征(type traits)的快捷访问(如 std::is_integral_v<T>),或者需要根据类型变化的值。
-
如何用:使用 template 关键字加上 using(或者直接定义变量)即可。
cpp
// 语法
template<模板形参列表> 类型 变量名 = 初始值;
#include <iostream>
// 定义一个变量模板 pi,默认值为 0(但实际我们会特化)
// 注意:这里直接给一个通用默认值,但对特定类型进行特化更常见。
template<typename T>
constexpr T pi = T(3.1415926535897932385); // 通用定义
// 不过通常我们会对特定类型提供更精确的特化(可选)
// 但这里通用定义已经可以工作,因为 T(3.14…) 会转换为对应类型。
int main() {
// 使用变量模板,实例化为 float 和 double
float pi_float = pi<float>;
double pi_double = pi<double>;
// 甚至可以用于整数(会截断)
int pi_int = pi<int>;
std::cout << "pi as float: " << pi_float << std::endl;
std::cout << "pi as double: " << pi_double << std::endl;
std::cout << "pi as int: " << pi_int << std::endl;
return 0;
}




