現在のコードはコンパイルされませんstd::vector<X> &
。したがって、エラーです。
私は2つのテンプレートパラメータを使用します。
template<typename T, typename V>
void doVector(vector<T> & v, V && value)
{
v.emplace_back(std::forward<V>(value));
}
V
がT
異なるタイプの可能性があるので、それは問題を解決していないという理由だけでそうemplace_back
は、より理にかなって、それはコードをより汎用的になります。今:-)
次の改善:我々は(おそらくコンストラクタを使用して)引数value
からタイプT
のオブジェクトを作成するemplace_back
を使用していることから、私たちはこの事実を利用し、それ可変長機能作ることができます:
助け
struct point
{
point(int, int) {}
};
std::vector<point> pts;
doVector(pts, 1, 2);
std::vector<int> ints;
doVector(ints, 10);
希望:あなたのようにそれを使用することができて、さらに汎用的である
template<typename T, typename ...V>
void doVector(vector<T> & v, V && ... value)
{
v.emplace_back(std::forward<V>(value)...);
}
。
'emplace_back()'? – Mysticial
'v.emplace_back(std :: forward(値))'。あなたが '移動 'した場合、左辺値から移動することになります(この場合、' T && 'は右辺値と左辺値の両方にバインドすることができます) –
Praetorian
@Praetorian push_backは、 'void push_back(value_type&& val);'これは 'emplace_back(forward)'と同じように動作するはずです。右ですか? –
texasbruce