可变参模板的初步实现

简介: 可变参模板的初步实现

C++使用模板可变参输入一个数据包DEMO:


class ttt
{
public:
    int xxx = 111;
};
实现两个重载的模板:
template <typename T>
std::ostream & Print(std::ostream &o, const T& t)
{
    return o << t<<std::endl;
}
template <typename T, typename ... Argus>
std::ostream & Print(std::ostream &o, const T& t,const Argus&...arg)
{
    o << t << std::endl;
    return Print(o,arg...);
}
关键就在于对Print的调用
比如参数为cout,1,3,5
第一次:Print(cout,1,3,5)
第二次:Print(cout,3,5)
第三次:Print(cout,5)
所以第三次就会匹配到第一个函数,于是返回,函数调用结束。
/*
 *传递给标准库用的重载函数都要在类外定义,模板实例化的时候程序会在runtime时候会根据类型自动找到合适的函数去匹配
 **/
 ostream& operator<<(std::ostream &os, const ttt &t)
{
    return os << t.xxx << std::endl;
}
ostream& operator<<(std::ostream &os, const ttt *t)
{
     return os << t->xxx << std::endl;
}
int main()
{
    int iNum = 1;
    float fNum = 1.223356;
    string strNum("1.333");
    char *szNum = "1.444";
    ttt t;
    ttt *pT = new ttt();
    Print(cout, iNum, fNum,strNum.c_str(), szNum,t,pT,1215545);
    return 0;
}
}


相关文章
|
9月前
|
存储 算法 编译器
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
174 1
|
9月前
|
C++ 容器
【C++】仿函数在模板中的应用——【默认模板实参】详解(n)
【C++】仿函数在模板中的应用——【默认模板实参】详解(n)
|
3月前
|
JavaScript 前端开发
模板字符串中怎样使用字符串模板字面量?
通过以上这些方式,可以充分发挥模板字符串和字符串模板字面量的强大功能,更灵活、高效地处理字符串操作,提高代码的可读性和可维护性。
35 2
|
8月前
|
编译器
模板初阶(1):函数模板,类模板
模板初阶(1):函数模板,类模板
|
8月前
|
编译器
模板初阶(2):函数模板的匹配原则,类模板的实例化
模板初阶(2):函数模板的匹配原则,类模板的实例化
|
9月前
|
Python
模板变量
【2月更文挑战第22天】模板变量。
38 1
|
编译器 C++
C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化(1)
我们先来思考一个问题,如果有人让你实现一个通用的交换函数你们会怎么做?有的小伙伴会说,我会使用函数重载的方式,把每一种类型重载,但…难道就没有更容易的办法,不用敲那么多次吗?ok,就来看看我们今天要介绍的模板,能很好的帮你解决这个问题。
196 0
|
编译器 C++
C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化(2)
C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化
150 0
|
编译器 C++
C++模板总结, 外加一些模板的特殊用法(语法), 比如非类型模板参数, 模板的特化全特化, 以及真正理解为何模板不可以分离编译
C++模板总结, 外加一些模板的特殊用法(语法), 比如非类型模板参数, 模板的特化全特化, 以及真正理解为何模板不可以分离编译
C++模板总结, 外加一些模板的特殊用法(语法), 比如非类型模板参数, 模板的特化全特化, 以及真正理解为何模板不可以分离编译