c++ 17 constexpr

未来已来:从SFINAE到concepts

cpp 复制代码
#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);  // 字符串既是容器也是单值,这里会作为容器处理  
}
相关推荐
yxc_inspire11 分钟前
C++STL在算法竞赛中的应用详解
c++·算法·stl
元亓亓亓22 分钟前
Java后端开发day46--多线程(二)
java·开发语言
Kay_Liang29 分钟前
深入解析JavaScript变量作用域:var、let、const全攻略
开发语言·javascript·const·var
是店小二呀32 分钟前
【算法-哈希表】常见算法题的哈希表套路拆解
数据结构·c++·算法·散列表
jiunian_cn38 分钟前
【c++】多态详解
java·开发语言·数据结构·c++·visual studio
萧鼎41 分钟前
深入探索 Python 的 QuTiP 5 库:量子计算与开放量子系统模拟的利器
开发语言·python·量子计算
炯哈哈44 分钟前
【上位机——MFC】对话框
开发语言·c++·mfc·上位机
溟洵1 小时前
【C++ Qt】容器类(GroupBox、TabWidget)内附思维导图 通俗易懂
c++·qt
python算法(魔法师版)1 小时前
MATLAB安装常见问题及解决方案详解(含代码示例)
开发语言·matlab
古月-一个C++方向的小白1 小时前
C++STl——list
c++·windows·list