简介
模板是C++的一块重要内容,在模板中比较复杂的就是可变参数模板。这篇文章主要通过三个实例来进行可变参数模板的学习,包括类模板和函数模板,其中涉及到模板递归和模板的特化与偏特化。
类模板
下面是一个打印tuple元素的例子,例如我们创建了一个tuple为make_tuple(5, “hello”, bitset<16>(80)),那么打印输出为{5,hello,0000000001010000}。当然写程序的方法有很多,下面的代码只是为了学习可变参数的类模板实例。16>
|
|
上面这个例子是在递归实例化类模板。下面是一个递归继承的类模板,和上面的实例相比要更复杂一点,我们在这个例子中表述的继承关系如图所示:
实例代码如下,设计巧妙的地方在于构造函数存在递归调用关系,而不是创建临时对象。
函数模板
函数模板没有偏特化一说,主要是全特化和普通的函数模板。下面的实例实现了一个简单的功能就是print(12, 30.90, “he”),代码如下:
|
|
应该说函数模板和类模板相比起来要容易很多,但是需要注意递归结束的条件,把握这一点应该就没有太大的问题。
声明
若有错误,欢迎讨论。严禁抄袭,仅用于学习。