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_backフィッティングコンストラクターでオブジェクトをインプレースで作成する which を使用できます。もちろん、これにはそのようなコンストラクターが定義されている必要があります。

v.emplace_back(1,2);

C++11 以降、すべての std-container は、上記の動作を提供する 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 に答える