转发参数包

来源:互联网 发布:c语言如何输入多个数据 编辑:程序博客网 时间:2024/05/18 16:36

在新标准下,我们可以组合使用可变参数模板与forward机制来编写函数,实现将其实参不变地传递给其他函数。

标准库容器的emplace_back成员是一个可变参数成员模板,它用其实参在容器管理的内存空间中直接构造一个元素。

保持类型信息是一个两阶段的过程。首先,为了保持实参中的类型信息,必须将emplace_back的函数参数定义为模板类型参数的右值引用:

class StrVec{public:    template <typename ... Args>    void emplace_back(Args&& ...);    // 其他定义};

模板参数包中的模式是&&,意味着每个函数参数将是一个指向其对应实参的右值引用。
其次,当emplace_back将这些实参传递给construct时,我们必须使用forward来保持实参的原始类型。

template <typename ... Args>inline void StrVec::emplace_back(Args&& ... args){    // 如果需要的话重新分配StrVec内存空间    chk_n_alloc();    alloc.construct(first_free++, std::forward<Args>(args)...);}
0 0