C++ zip实现

最近心血来潮想在C++里实现一些像在python里一样好用的小组件,主要是希望充分发挥C++11里for循环的威力。在完成了enumerate之后,在zip的完成上用了比较久的时间。

在这里记录下来自己对zip的简单实现。

主要就用了模板递归,结合了一些C++11的新特性完成的。

#pragma once

namespace twistoy {

template<typ......

C++ Template

函数模板

使用模板

模板被编译了两次,分别发生在:

实例化之前,先检查模板代码本身,查看语法是否正确。

在实例化旗舰,检查模板代码,查看是否所有的调用都有效。

模板的推导

在模板推导的过程中,不会进行自动的类型转换,每个类型都必须正确的匹配。

template<typename T>

inline T const& max (T const&......

C++11 完美转发+变长参数

完美转发(argument forwarding):

给定一个函数F(a1, a2, ..., an),要写一个函数G,接受和F相同的参数并传递给F。

这里有三点要求:

1. 能用F的地方,G也一定能用。

2. 不能用F的敌方,G也一定不能用。

3. 转发的开销应该是线性增长的。

这里在C++11出现之前,人们做了很多尝试。就出现了很多的替代方案,直到C++11出现之后,......