64,685
社区成员
发帖
与我相关
我的任务
分享
#include<tuple>
#include<iostream>
#include<string>
using namespace std;
template<int IDX,int MAX,typename... Args>
struct PRINT_TUPLE
{
static void print(ostream& strm, const tuple<Args...> &p)
{
strm << get<IDX>(p) << (IDX + 1 == MAX ? "" : ",");
if(IDX+1 != MAX) PRINT_TUPLE<IDX+1, MAX, Args...>::print(strm, p);
}
};
template<int MAX,typename... Args>//为什么这段不能注释掉?已经不会调用了
struct PRINT_TUPLE<MAX, MA`X, Args...>
{
static void print(ostream& strm, const tuple<Args...> &p)
{
cout << "last";
}
};
template<typename... Args>
ostream& operator << (ostream &strm, const tuple<Args...> &p){
cout << "[";
PRINT_TUPLE<0, sizeof...(Args), Args...>::print(strm, p);
return cout << "]";
}
int main()
{
tuple<int, float, string > p(12, 1.2, "asdasd");
cout << p;
getchar();
}
if(IDX+1 != MAX) PRINT_TUPLE<IDX+1, MAX, Args...>::print(strm, p);
当IDX+1==MAX时,运行时不调用,但编译器需要知道原型,如果不提供,就递归自己了,跟下面代码一样
if(0) test();
这个函数不被调用,但必须提供原型
#include<tuple>
#include<iostream>
#include<string>
using namespace std;
template<int IDX,int MAX,typename... Args>
struct PRINT_TUPLE
{
static void print(ostream& strm, const tuple<Args...> &p)
{
strm << get<IDX>(p) << (IDX + 1 == MAX ? "" : ",");
PRINT_TUPLE<IDX+1, MAX, Args...>::print(strm, p);
}
};
template<int MAX,typename... Args>//为什么这段不能注释掉?已经不会调用了
struct PRINT_TUPLE<MAX, MAX, Args...>
{
static void print(ostream&, const tuple<Args...>&) { }
};