转发参数包

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

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

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

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

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

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

你可能感兴趣的:(C++,Primer学习笔记,转发参数包)