[英]Take variable number of arguments and put them in std::vector
我正在創建一個類 - 讓我們稱之為Container
- 它基本上只包含一個std::vector
和一些特殊的邏輯來決定如何選擇矢量值。 我想添加一個方法,通過一次調用向我的類添加多個值。 這是我添加一個項目的方法:
void LoopGenerator::add(RandomStripe &stripe)
{
stripes.push_back(new SingleStripe(stripe));
}
我想要一個像這樣調用的類似方法:
LoopGenerator gen = LoopGenerator();
gen.add(RandomStripe(), RandomStripe(), RandomStripe() ... and as much as you want ... );
並將所有參數添加到內部std::vector
。
這可能只使用標准庫,或者最好沒有標准庫嗎?
您可以使用std :: initializer_list。 例如
#include <initializer_list>
#include <algorithm>
#include <vector>
#include <iterator>
//...
void LoopGenerator::add( std::initializer_list<RandomStripe> stripe )
{
std::transform( stripe.begin(), stripe.end(),
std::back_inserter( stripes ),
[]( const RandomStripe &s ) { return new SingleStripe( s ); } );
}
並稱之為
gen.add( { RandomStripe(), RandomStripe(), RandomStripe(), /*...*/ } );
如果您有C ++ 11,則可以使用可變參數模板來完成此任務。
在以前的版本中,我建議只做方法鏈接:
LoopGenerator& LoopGenerator::add(RandomStripe &stripe)
{
stripes.push_back(new SingleStripe(stripe));
return *this;
}
並將其gen.add(RandomStripe()).add(RandomStripe()).add(RandomStripe());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.