可变参数模板

  1. sizeof...计算参数个数
cpp 复制代码
template<typename... Ts>
void magic(Ts... args) {
    std::cout << sizeof...(args) << std::endl;
}

2.递归模板函数

cpp 复制代码
template<typename T>
void printf1(T value) {
    std::cout << value << std::endl;
}

template<typename T, typename... Ts>
void printf1(T value, Ts... args) {
    std::cout <<"剩余参数:" <<sizeof...(args)<< "," << value << std::endl;
    printf1(args...);
}

int main() {
    printf1(1, 2, "123", 1.1);
    return 0;
}

3.C++17 中增加了变参模板展开的支持

cpp 复制代码
//C++17 中增加了变参模板展开的支持
template<typename T0, typename... T>
void printf2(T0 t0, T... t) {
    std::cout << t0 << std::endl;
    if constexpr (sizeof...(t) > 0) printf2(t...);
}

4.初始化列表展开

cpp 复制代码
template<typename T, typename... Ts>
auto printf3(T value, Ts... args) {
    std::cout << value << std::endl;
    (void) std::initializer_list<T>{([&args] {
        std::cout << args << std::endl;
    }(), value)...};
}
相关推荐
晚霞的不甘13 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
冰暮流星13 小时前
javascript之数组
java·前端·javascript
代码游侠13 小时前
C语言核心概念复习——C语言基础阶段
linux·开发语言·c++·学习
㓗冽13 小时前
60题之内难题分析
开发语言·c++·算法
大江东去浪淘尽千古风流人物13 小时前
【VLN】VLN仿真与训练三要素 Dataset,Simulators,Benchmarks(2)
深度学习·算法·机器人·概率论·slam
rainbow688913 小时前
C++开源库dxflib解析DXF文件实战
开发语言·c++·开源
John_ToDebug13 小时前
Chromium安全架构深度解析:从悬空指针检测到内存安全防御体系
c++·chrome
晚霞的不甘13 小时前
Flutter for OpenHarmony天气卡片应用:用枚举与动画打造沉浸式多城市天气浏览体验
前端·flutter·云原生·前端框架
D_evil__13 小时前
【Effective Modern C++】第五章 右值引用、移动语义和完美转发:24. 区分万能引用和右值引用
c++
xkxnq14 小时前
第五阶段:Vue3核心深度深挖(第74天)(Vue3计算属性进阶)
前端·javascript·vue.js