[英]vector push_back with forwarding?
我在代碼中做了這樣的事情
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
,它將使用合適的構造函數在std::vector::emplace_back
創建對象。 當然,這需要您定義此類構造函數。
v.emplace_back(1,2);
從C ++ 11開始,每個std容器都提供類似emplace的函數,該函數具有上述行為。
兼容性說明:MSVC可能尚不支持此功能,因為它僅支持CTP版本的可變參數模板,這不會影響標准庫,並且gcc的libstd ++仍缺少關聯容器中的emplace成員函數。
push_back
不支持轉發,但是新的emplace_back
支持。
但是, push_back
確實支持初始化程序列表:
v.push_back({1,2});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.