可变参数模板

  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)...};
}
相关推荐
天天向上10244 小时前
vue2 vue3 修改elementUI和elementPlus主题颜色
前端·javascript·elementui
Minecraft红客4 小时前
复原大唐3d项目测试版
c++·3d·青少年编程·电脑·娱乐
Zhangzy@4 小时前
Rust Workspace 构建多项目体系
开发语言·前端·rust
通往曙光的路上4 小时前
day23_密码加密 前端验证码 监听器 svn版本控制
前端·svn
TivonaLH4 小时前
v-code-diff入口文件的配置
前端·javascript·vue.js
青衫码上行4 小时前
【Java Web学习 | 第四篇】CSS(3) -背景
java·前端·学习
.生产的驴4 小时前
React 路由权限跳转 Token判断 路由控制 登录状态控制
前端·javascript·react.js·ajax·前端框架·c#·ecmascript
小-黯5 小时前
OpenGL使用C++实现相机模块功能
c++·3d·opengl
_dindong6 小时前
牛客101:二叉树
数据结构·c++·笔记·学习·算法
数字化脑洞实验室7 小时前
如何理解不同行业AI决策系统的功能差异?
大数据·人工智能·算法