017可變參模板的例子
#include<iostream>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
template<typename ... T>
void myFunction(T...args)
{
cout << "args=" <<sizeof...(args) << endl;
cout << sizeof...(T) << endl;
}
template<typename T,typename ...U>
void myFunction02(const T&firstarg,const U&...otherargs)
{
cout << sizeof...(otherargs) << endl;
}
void func()
{
myFunction();
myFunction(10, 20);
myFunction(10, 20,23,4343.34);
cout << "----------------------------------" << endl;
myFunction02(1, 23, 43);
}
int main(void)
{
func();
system("pause");
return 0;
}
018可變參函數模板參數包的展開_一個參數加一包函數容易解包
#include<iostream>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
void myFunction02()
{
cout << "參數解包完成,這是終止函數" << endl;
}
template<typename T, typename ...U>
void myFunction02(const T&firstarg, const U&...otherargs)
{
cout << sizeof...(otherargs) << endl;
cout << "第一個參數的值爲:" << firstarg << endl;
myFunction02(otherargs...);
}
void func()
{
myFunction02(1, 23, 43);
}
int main(void){
func();
system("pause");
return 0;
}
019可變參類模板_通過繼承遞歸展開調用
#include<iostream>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
template<typename ...Args>class myclass{};
template<>class myclass<>
{
public:
myclass()
{
cout << "0個模板參數特化版本執行"<<this << endl;
}
};
template<typename First,typename ...Other>
class myclass<First,Other...>:private myclass<Other...>
{
public:
myclass():m_i(0)
{
cout << "myclass的構造函數執行了"<<this << endl;
}
myclass(First parf,Other...Paro):m_i(parf),myclass<Other...>(Paro...)
{
cout << "有參數構造函數執行"<<this << endl;
}
public:
First m_i;
};
int main(void)
{
myclass<int, float, double>myc;
cout << "----------------" << endl;
myclass<int,float,double> my_class01(12, 123.565, 344.5845734958);
system("pause");
return 0;
}
020可變參類模板_通過遞歸組合方式展開函數包
#include<iostream>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
template<typename ...Args>class myclass {};
template<>class myclass<>
{
public:
myclass()
{
cout << "0個模板參數特化版本執行" << this << endl;
}
};
template<typename First, typename ...Other>
class myclass<First, Other...>
{
public:
myclass() :m_i(0)
{
cout << "myclass的構造函數執行了" << this << endl;
}
myclass(First parf, Other...Paro) :m_i(parf),m_o(Paro...)
{
cout << "有參數構造函數執行" << this << endl;
}
public:
First m_i;
myclass<Other...>m_o;
};
int main(void)
{
myclass<int, float, double> myclass01(1, 23.32, 34.545);
system("pause");
return 0;
}
021可變參類模板_通過tuple和遞歸調用展開函數包
#include<iostream>
#include<cstdlib>
#include<string>
#include<vector>
#include<queue>
#include<functional>
using namespace std;
template<int mycount,int myMaxCount,typename ...T>
class myclass
{
public:
static void myFunction02(const tuple<T...>&t)
{
cout << "value="<<get<mycount>(t) << endl;
myclass<mycount + 1, myMaxCount, T...>::myFunction02(t);
}
};
template<int myMaxCount,typename ...T>
class myclass<myMaxCount,myMaxCount,T...>
{
public:
static void myFunction02(const tuple<T...>&t)
{
;
}
};
template<typename ...T>
void myFunction(const tuple<T...>&t)
{
myclass<0, sizeof...(T), T...>::myFunction02(t);
}
int main(void)
{
tuple<float, int, int>mytuple(12.34f, 100, 1);
cout << get<0>(mytuple) << endl;
cout << get<1>(mytuple) << endl;
myFunction(mytuple);
system("pause");
return 0;
}