1 Star 0 Fork 3

uss-enterprise/深入应用C++11:代码优化与工程级应用 的实践代码

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2-9.cpp 1.44 KB
一键复制 编辑 原始数据 按行查看 历史
// 可变参数模板和普通模板的语义时一样的,指示写法上稍微有区别,声明可变参数模板时需要在 typename 或 class 后面带上省略号
#include <initializer_list>
#include <iostream>
#include <tuple>
using namespace std;
//可变参数模板函数
//1. 使用递归函数方式展开参数包
//2. 使用逗号表达式和初始化列表方式展开参数包
//逗号表达式:
//var = (count=19, incr=10, count+1); 首先把 count 赋值为 19,把 incr 赋值为 10,然后把 count 加 1,最后,把最右边表达式 count+1 的计算结果 20 赋给 var。上面表达式中的括号是必需的,因为逗号运算符的优先级低于赋值操作符。
//逐步计算,得到最后一个值
template<class T>
void printarg(T t)
{
cout << t << endl;
}
template<typename... Args>
void expand(Args... args)
{
std::initializer_list<int>{(printarg(args), 0)...}; //逗号表达式
}
//可变参数模板类
template<typename... Args> struct Sum;
template<typename First, typename... Rest>
struct Sum<First, Rest...>
{
enum { value = Sum<First>::value + Sum<Rest...>::value };
};
template<typename Last>
struct Sum<Last>
{
enum {value = sizeof(Last)};
};
int main(void)
{
expand(1, 2, 3, 4);
std::tuple<int> tp1 = std::make_tuple(1);
std::tuple<int, double> tp2 = std::make_tuple(1, 2.5);
std::tuple<int, double ,string> tp3 = std::make_tuple(1, 2.5, "");
return 0;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/uss-enterprise/c11_book_learned_code.git
[email protected]:uss-enterprise/c11_book_learned_code.git
uss-enterprise
c11_book_learned_code
深入应用C++11:代码优化与工程级应用 的实践代码
master

搜索帮助