C++可变参数模板
之前学习模板,都是固定参数的模板,前段时间看源码时,注意到了变参模板类,觉得很有意思。
什么是可变参模板
template<typename... Args> class MoreApply;
如上,就是一个可变参模板类的申明。至于Args…中传进来多少参数,由使用者决定。了解变参模板函数的程序员都知道,变参模板作难的是参数展开,变参模板类也不例外,接下来,介绍两种常见的变参模板类参数展开方法:
1.包含展开
下面代码展示了一个变参模板类,遍历所有模板参数,判断一个值。
#include<iostream>
using namespace std;
//纯虚函数
struct AbstractBase
{
virtual bool hander(const int& n) = 0;
};
//变参模板类的申明
template <typename... Args> struct VarParaClass;
//变参模板类的展开,这里我们把参数分成两块,第一块参数T,和第二块参数Args...;
//T和VarParaClass<Args...>分别作为VarParaClass<T, Args... >类的成员变量
//VarParaClass<T, Args... >中的hander函数首先调用T中的hander函数,然后得到一个状态status,根据这个状态判断是否要调用下一个参数包
template<typename T, typename ... Args>
s