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

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.kler.cn/a/472858.html

相关文章:

  • 《Spring Framework实战》9:4.1.4.依赖注入
  • eNSP之家——路由器--入门实例详解
  • 【权限管理】Apache Shiro学习教程
  • Python创建GitHub标签的Django管理命令
  • Linux服务器网络不通问题排查及常用命令使用
  • 如何配置Cursor的显示主题模式
  • conda+jupyter+pycharm:如何在Windows conda环境下运行jupyter并使用浏览器或者pycharm运行.ipynb
  • 开源一款简单易用的键盘音效工具
  • el-table 多级表头
  • 域名反查IP多种方式
  • 【Linux基础指令】第一期
  • 高频 SQL 50 题(基础版)_197. 上升的温度
  • cursor试用出现:Too many free trial accounts used on this machine 的解决方法
  • html 前端进行浮动布局设置
  • Go跨平台UI开发之wails的使用(1)
  • Lua语言的软件工程
  • 实现串口控制
  • 计算机网络 (31)运输层协议概念
  • JVM实战—11.OOM的原因和模拟以及案例
  • python代码实现了一个金融数据处理和分析的功能,主要围绕国债期货及相关指数数据展开
  • el-table表格合并某一列
  • 【集成学习】Bootstrap抽样
  • 深度学习——回归实战
  • rust学习——环境搭建
  • 海思Linux-DEMO(1)-sample_venc(h265,h264)视频流文件的获取
  • TRAVEO™ T2G的SWAP功能