C++可变参数模板(展开参数包)

C++版本 C11 - C14

例子:

cpp 复制代码
#include "X:\Work\Share\CCode\CPlatform\Base\global_c_all.h" 

using namespace lf;
using namespace std;
 
 

//递归终止函数
void Print()
{
	_cout << _t("\n");
}

template <typename T, typename ...Args>
void Print(T first, Args... args)
{
	_cout << first;
	Print(args...);
}

void main()
{
	 	 
	int pi = 3.14;
	 
	Print("pi=", pi,"\t_Math::_e=", _Math::_e);

	Print("a=", 10, _t("\tb="), 3.14,_t("\t水果:"), lf::水果("苹果",200,"圆形"));

}
 

输出:

其中

两个函数名称必须一样:

如果想获取参数个数,可用sizeof...(args)

例如:

输出:

因为是递归调用,所以输出格式乱了,下

面是输出参数类型列表:

cpp 复制代码
#include "X:\Work\Share\CCode\CPlatform\Base\global_c_all.h" 

using namespace lf;
using namespace std;
 
 

//递归终止函数
void Print()
{
	_cout << _t("\n");
}

template <typename T, typename ...Args>
void Print(T first, Args... args)
{
	std::cout << typeid(first).name() << "\n";	 

	Print(args...);
}

void main()
{
	 	 
	int pi = 3.14;
	 
	Print("pi=", pi,"\t_Math::_e=", _Math::_e);	 

}
 

结果:

C++版本17或以上例子可用:

cpp 复制代码
#include <iostream>
using namespace std;

// 定义一个函数模板,接收任意类型的参数包并打印每个参数值
template<typename T>
void printArgs(T arg) {
    cout << "Arg value: " << arg << endl;
}

// 递归地展开参数包
template<typename... Args>
void expandPack(Args&&... args) {
    // 将args作为单个参数传入printArgs函数进行处理
    (printArgs(forward<Args>(args)), ...);
}

int main() {
    int a = 10;
    double b = 3.14;
    string c = "Hello";

    // 调用expandPack函数展开参数包
    expandPack(a, b, c);

    return 0;
}

输出:

相关推荐
one31214 小时前
高精度MEMS电容式倾角传感器:原理、结构与Python三维可视化
开发语言·python
程序员小八77714 小时前
Go 语言特性
开发语言·后端·golang
水饺编程15 小时前
第5章,[Win32 章节] :绘图模式
c语言·c++·windows·visual studio
INGNIGHT15 小时前
1908 · 布尔表达式求值(stack单调栈&dfs)
开发语言·c++·算法
এ慕ོ冬℘゜15 小时前
深入理解浏览器全屏 API:从 requestFullscreen 到全屏实战
开发语言·html
小小杨树15 小时前
【C++】学习:双缓冲视频流水线深解析
c++·性能优化·音视频开发
七夜zippoe16 小时前
DolphinDB 高可用部署实战:从容灾设计到故障自动转移
开发语言·python·高可用·容灾·dolphindb
不会就选b16 小时前
Linux之线程池(三)
linux·开发语言
棉晗榜16 小时前
C# HttpClient配置具有tls指纹发起跟浏览器一样的请求解决反爬虫防护
开发语言·爬虫·c#
青少儿编程课堂17 小时前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛