可变参模板的初步实现

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

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;
}
}


目录
打赏
0
0
0
0
1
分享
相关文章
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
177 1
【C++】仿函数在模板中的应用——【默认模板实参】详解(n)
【C++】仿函数在模板中的应用——【默认模板实参】详解(n)
模板字符串中怎样使用字符串模板字面量?
通过以上这些方式,可以充分发挥模板字符串和字符串模板字面量的强大功能,更灵活、高效地处理字符串操作,提高代码的可读性和可维护性。
35 2
|
3月前
|
在模板字符串中使用字符串模板字面量时要注意什么?
在使用模板字符串中的字符串模板字面量时,要充分理解其语法和特性,注意上述提到的各种细节,以确保代码的正确性、可读性和性能。
41 2
模板初阶(1):函数模板,类模板
模板初阶(1):函数模板,类模板
【C语言基础篇】数组传参规则详解
【C语言基础篇】数组传参规则详解
模板初阶(2):函数模板的匹配原则,类模板的实例化
模板初阶(2):函数模板的匹配原则,类模板的实例化
C++11可变模版参数的妙用 typename... 三点解析
C++11可变模版参数的妙用 typename... 三点解析
212 0
C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化(1)
我们先来思考一个问题,如果有人让你实现一个通用的交换函数你们会怎么做?有的小伙伴会说,我会使用函数重载的方式,把每一种类型重载,但…难道就没有更容易的办法,不用敲那么多次吗?ok,就来看看我们今天要介绍的模板,能很好的帮你解决这个问题。
196 0
C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化(2)
C++模板(函数模板,类模板)的基本使用与非类型模板参数与模板的特化
151 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等