欢迎光临
我们一直在努力

深入理解C++ 模板<四> 变量模板

变量模板(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;
}

赞(0)
未经允许不得转载:171主机测评 » 深入理解C++ 模板<四> 变量模板
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址