簡體   English   中英

獲取可變數量的參數並將它們放在std :: vector中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM