我正在上课 - 我们称之为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
。
这可能只使用标准库,或者最好没有它们吗?
答案 0 :(得分: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 ); } );
}
并称之为
gen.add( { RandomStripe(), RandomStripe(), RandomStripe(), /*...*/ } );
答案 1 :(得分:0)
如果您使用的是C ++ 11,则可以使用可变参数模板来完成此任务。
在以前的版本中,我建议只进行方法链接:
LoopGenerator& LoopGenerator::add(RandomStripe &stripe)
{
stripes.push_back(new SingleStripe(stripe));
return *this;
}
并将其称为gen.add(RandomStripe()).add(RandomStripe()).add(RandomStripe());