带有转发的矢量push_back

vector push_back with forwarding?

本文关键字:push back 转发      更新时间:2023-10-16

我在我的代码中做了这样的事情

S s;
s.a=1
s.b=2
v.push_back(s)

现在C++有了转发功能,我可以写一些类似的东西吗

v.push_back(1,2)

fyi visual studio支持转发,因为以下工作符合预期

//http://herbsutter.com/gotw/_102/
template<typename T, typename ...Args>
std::unique_ptr<T> make_unique( Args&& ...args )
{
    return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}

您可以使用std::vector::emplace_back,它将使用拟合构造函数就地创建对象。这当然需要定义这样一个构造函数。

v.emplace_back(1,2);

从C++11开始,每个std容器都提供了一个类似于模板的函数,该函数给出了上述行为。

兼容性说明:MSVC可能还不支持这一点,因为它只支持CTP中的可变模板,这不会影响标准库,而且gcc的libstd++仍然缺少关联容器中的模板成员函数。

push_back不支持转发,但新的emplace_back支持转发。

但是,push_back确实支持初始值设定项列表:

v.push_back({1,2});