考虑一些可变函数foo(int...args)
。
我希望能够动态调用它。也就是说,参数将通过一些简单的数据结构给我,如数组/矢量等(并不重要)。
如何将其传递给foo()
?
答案 0 :(得分:4)
注意:根据OP的评论,我认为在源集合中使用迭代器是一个可行的选择。
考虑使用标准库中常用的相同技巧,例如here。
template<typename InputIt>
void foo(InputIt begin, InputIt end)
{
for (InputIt it = begin; it != end; ++it)
{
// do whatever you need with (*it);
}
}
然后像这样调用它:
std::vector<int> myVector(1, 2, 3);
foo(myVector.begin(), myVector.end());
或,根据@YSC,
std::vector<int> myVector(1, 2, 3);
foo(std::begin(vector), std::end(vector));
要记住几件事。如果要使用此方法,则代码需要满足以下要求:放在foo
中的任何逻辑都应适用于源集合的value_type。例如,如果您明确地将(*it)
转换为foo
内的整数,而源向量的value_type
没有这样的转换,则编译将失败。
然而,这种方法带来了一些好处。您可以立即将此实施与std::vector<T>
或std::array<T>
一起使用。如果你想将它与std :: unordered_map这样的关联结构一起使用,它会有点棘手,但想法是一样的。