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

Take variable number of arguments and put them in std::vector

本文关键字:std vector 参数 获取      更新时间:2023-10-16

我正在创建一个类 - 我们称之为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());