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

c++ 17 constexpr

未来已来:从SFINAE到concepts

#include <type_traits>  
#include <vector>  
#include <list>  
#include <iostream>  // 一个通用的容器打印函数,支持任何带 begin()/end() 的容器  
template<typename Container>  
auto print_container(const Container& c) ->   decltype(std::begin(c), std::end(c), void()) {  std::cout << "容器内容: ";  for (const auto& item : c) {  std::cout << item << " ";  }  std::cout << std::endl;  
}  // 对于不是容器的类型,提供一个普通的打印函数  
template<typename T>  
void print(const T& value) {  std::cout << "单个值: " << value << std::endl;  
}  // 智能函数:自动选择合适的打印方式  
template<typename T>  
void smart_print(const T& value) {  // 尝试作为容器打印,如果失败就作为单个值打印  if constexpr (requires { std::begin(value); std::end(value); }) {  print_container(value);  } else {  print(value);  }  
}  int main() {  // 容器类型  std::vector<int> vec = {1, 2, 3, 4, 5};  std::list<double> lst = {1.1, 2.2, 3.3};  // 单个值  int x = 42;  std::string str = "hello";  // 自动选择合适的打印方式  smart_print(vec);  // 使用容器版本  smart_print(lst);  // 使用容器版本  smart_print(x);    // 使用单值版本  smart_print(str);  // 字符串既是容器也是单值,这里会作为容器处理  
}
http://www.lryc.cn/news/519625.html

相关文章:

  • Java QueryWrapper groupBy自定义字段,以及List<Map>转List<Entity>
  • 【Rust自学】11.7. 按测试的名称运行测试
  • Git:Cherry-Pick 的使用场景及使用流程
  • Ubuntu 24.04 LTS系统安装Docker踩的坑
  • 工作生活的感悟
  • NCCL学习笔记-函数解析
  • windows系统如何将基座大模型私有化部署
  • 牛客网刷题 ——C语言初阶(6指针)——BC106 上三角矩阵判定
  • CentOS 7 下 MySQL 5.7 的详细安装与配置
  • 【深度学习】数据预处理
  • day01-HTML-CSS——基础标签样式表格标签表单标签
  • 无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型
  • 搭建prometheus+grafana监控系统抓取Linux主机系统资源数据
  • uni-app无限级树形组件简单实现
  • 基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)
  • 请求方式(基于注解实现)
  • day38 tcp 并发 ,linux下的IO模型----IO多路复用
  • 更新Office后,LabVIEW 可执行程序生成失败
  • 重塑视频创作的格局!ComfyUI-Mochi本地部署教程
  • 如何理解机器学习中的非线性模型 ?
  • Web 品质样式表
  • 计算机网络 笔记 数据链路层3(局域网,广域网,网桥,交换机)
  • centos7.6 安装nginx 1.21.3与配置ssl
  • redis 内存管理和持久化机制
  • python-42-使用selenium-wire爬取微信公众号下的所有文章列表
  • 机器人碳钢去毛刺,用大扭去毛刺主轴可轻松去除
  • day05_Spark SQL
  • Java线程的异常处理:确保线程安全运行
  • nvim 打造成可用的IDE(2)
  • 如何当前正在运行的 Elasticsearch 集群信息