获取可变数量的参数并将它们放在std :: vector中

Tom*_*ica 4 c++ overloading vector

我正在创建一个类 - 让我们称之为Container- 它基本上只包含一个std::vector特殊的逻辑,决定了如何选择矢量值.我想添加一个方法,通过一次调用向我的类添加多个值.这是我添加一个项目的方法:

void LoopGenerator::add(RandomStripe &stripe)
{
    stripes.push_back(new SingleStripe(stripe));
}
Run Code Online (Sandbox Code Playgroud)

我想要一个像这样调用的类似方法:

LoopGenerator gen = LoopGenerator();
gen.add(RandomStripe(), RandomStripe(), RandomStripe() ... and as much as you want ... );
Run Code Online (Sandbox Code Playgroud)

并将所有参数添加到内部std::vector.

这可能只使用标准库,或者最好没有标准库吗?

Vla*_*cow 5

您可以使用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 ); } );
}
Run Code Online (Sandbox Code Playgroud)

并称之为

gen.add( { RandomStripe(), RandomStripe(), RandomStripe(), /*...*/ } );
Run Code Online (Sandbox Code Playgroud)