当前位置: 首页 > article >正文

C++20中支持的非类型模板参数

      C++20中支持将类类型作为非类型模板参数:作为模板参数传入的对象具有const T类型,其中T是对象的类型,并且具有静态存储持续时间(static storage duration)。

      在C++20之前,非类型模板参数仅限于:左值引用类型、整数类型、指针类型、指向成员类型的指针、枚举类型、std::nullptr_t。在C++20中,它已扩展并支持:浮点类型、字面量类类型(literal class type)。

      测试代码如下:

namespace {
template<int N> // int non-type template parameter
struct Array {
	static_assert(N > 0, "N must be greater than 0");
	int data[N];
};

template<float v> // c++20
void print_value()
{
	static_assert(v < 0, "v must be less than 0");
	std::cout << "v: " << v << std::endl;
}

// literal class type
struct Foo {
	constexpr Foo() {}
	constexpr Foo(int value): has_value(true), value(value) {}

	const int value{};
	const bool has_value{ false };
};

template <Foo f> // c++20
void print_foo() {
	if constexpr (f.has_value)
		std::cout << "value: " << f.value << std::endl;
	else
		std::cout << "no value" << std::endl;
}

} // namespace

int test_template_20()
{
	Array<5> arr;
	arr.data[3] = {6};
	std::cout << "arr[3]: " << arr.data[3] << std::endl;

	print_value<-1.1f>();

	print_foo < Foo{ 66 } > ();
	print_foo < Foo{} > ();

	return 0;
}

      执行结果如下图所示:

      GitHub:https://github.com/fengbingchun/Messy_Test


http://www.kler.cn/a/306265.html

相关文章:

  • AUTOSAR_EXP_ARAComAPI的7章笔记(3)
  • QQ 小程序已发布,但无法被搜索的解决方案
  • 阿里云通义大模型团队开源Qwen2.5-Coder:AI编程新纪元
  • 三维测量与建模笔记 - 特征提取与匹配 - 4.2 梯度算子、Canny边缘检测、霍夫变换直线检测
  • 免费,WPS Office教育考试专用版
  • 微服务架构面试内容整理-API 网关-Gateway
  • QT多线程编程(基础概念以及示例)
  • 【深度学习】搞懂卷积神经网络(一)
  • HTML贪吃蛇游戏
  • 【Spring Boot】SpringBoot自动装配-Import
  • CenterPoint-KITTI:环境配置、模型训练、效果展示;KITTI 3D 目标检测数据集下载
  • 寄存器的位数据调测方法(摩尔信使MThings)
  • Axure科技感大屏系统设计:智慧农场管理平台
  • SCRM电商管理后台Axure高保真原型 源文件
  • 浅谈为什么数据库要用B树
  • 爬虫全网抓取
  • 大众萨克森:SNP助力汽车制造智能化,实现SAP S/4HANA系统成功升级
  • 店群合一模式下的社区团购新发展——结合链动 2+1 模式、AI 智能名片与 S2B2C 商城小程序源码
  • LeetCode509:斐波那契数列
  • 4.C_数据结构_队列
  • Java异常处理详细讲解及常见面试问题
  • 无人机巡检:突破传统局限,引领智能监测新时代
  • java 网络编程URL与URLConnection的使用
  • 深入解析 Apache Ranger
  • 电容的不同材质对应的温度范围
  • Redis主要问题(缓存问题)