1

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

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)... ) );
}
4

2 回答 2

5

您可以使用std::vector::emplace_backwhich 将使用合适的构造函数就地创建对象。这当然需要您定义这样的构造函数。

v.emplace_back(1,2);

从 C++11 开始,每个标准容器都提供了一个类似 emplace 的函数,它给出了上述行为。

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

于 2013-02-23T18:02:10.167 回答
2

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

但是,push_back确实支持初始化列表:

v.push_back({1,2});
于 2013-02-23T18:03:11.413 回答