如何动态地将参数传递给可变参数函数?

时间:2017-06-28 15:51:05

标签: c++ c++11

考虑一些可变函数foo(int...args)

我希望能够动态调用它。也就是说,参数将通过一些简单的数据结构给我,如数组/矢量等(并不重要)。

如何将其传递给foo()

1 个答案:

答案 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这样的关联结构一起使用,它会有点棘手,但想法是一样的。