C++11 模板元编程(6) - 递归(循环迭代)

转载https://www.jianshu.com/p/b56d59f77d53

// 注意声明变长参数时...在参数名前面,而对其使用时...在参数名后面。
template<typename ...Numbers> struct Sum;

template<typename Number, typename ...LeftNumbers>
struct Sum<Number, LeftNumbers...>
{
    using Result = typename Add<Number, typename Sum<LeftNumbers...>::Result>::Result;
};


// 参数个数没有,否则递归展开参数
template<> struct Sum<>
{
    using Result = IntType<0>;
};

#define __sum(...)  typename Sum<__VA_ARGS__>::Result

// 
__sum();  // 返回 IntType<0>
__sum(__int(1), __int(2), __int(5)); // 返回 IntType<8>

猜你喜欢

转载自blog.csdn.net/Hu_yilang/article/details/88057279