文章标题

模板超编程是通过使用已经实例化出的代码来编程

#include <tuple>
#include <iostream>
#include <string>
using namespace std;
template <int IDX, int max, typename... Args>
struct TUPLE_PRINT{
    static void print(ostream& strm,const tuple<Args... >& t)//1 少const
    {
        strm << get<IDX>(t) << (IDX+1==max ? "" : ",") ;
        //IDX + 1 = max ? TUPLE_PRINT(max, t) : IDX ++; //注意1
        TUPLE_PRINT<IDX+1,max,Args...>::print(strm,t);
    }

};
//partial specialization to end the recursion
template <int max, typename... Args>//注意2
struct TUPLE_PRINT<max, max, Args...>{
    static void print(ostream& strm, const tuple<Args... args>& t)
    {       
    }
}
template <typename... Args>
ostream& operator<<(ostream& strm, const tuple<Args...> &t)
{
    strm << "["
        << TUPLE_TUPLE<0,sizeof...(Args), Args...>::print(strm, t);
    return strm << "]";
}

void main()
{
    tuple<int,float,string> t(77,1.36,"more light");
    cout << " " << t << endl;
}
//模板部分递归,之前在E中就不明白怎么结束递归
//只知道用一个偏特化来结束,也不知道这个偏特化该怎么写:
//1:从注意1,可以看出我现在的念想还是,用值来控制,事实情况也确实是idx == max
//结束递归,但事实情况是,让编译器自己去决定什么时候,跟重载一样,而且可以确定是
//他一定可以工作的很好,另外两点,a,递归调用的怎么可能是类(除非他有operator())
/*b:一个模板类用的时候,必须加上他的模板参数
  2:注意2,A实在说不上是总结,因为我实在不懂,这个偏特化为什么是空的函数体?至少应该
    把第max个元素输出吧
        B 不得不注意的是,他的名字后面还有<paras>,且参数个数与原模板保持一致
*/
void main1()
{
    tuple<int,int,int>t{1,1,1}//have a try
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值