Java函数在C++中具有任意数量的参数

What would be equal of Java function with any number of parameters in C++?

本文关键字:任意数 参数 函数 C++ Java      更新时间:2023-10-16

Java函数在C++中具有任意数量的参数是什么?

void anyNumberOfParamas(String... strings) {
    for (String str : strings) {
        // do something with string
    }
}

您有两种选择:可变参数模板或采用std::initializer_list函数。


第一个看起来像这样:

template <typename... Ts>
void anyNumberOfParams(const Ts&... xs)
{
    (something(xs), ...);
}
使用

此方法,每次使用不同类型的调用anyNumberOfParams时,都会获得不同的实例化。"迭代"在编译时完成。

如果要允许此函数仅接受std::string,还需要正确约束Ts...


第二个看起来像这样:

void anyNumberOfParams(std::initializer_list<std::string> xs)
{
    for(const auto& x : xs) something(x);
}

std::initializer_list基本上是const元素数组上的语法糖。在这种情况下,迭代是在运行时完成的,并且只有一个实例化 anyNumberOfParams

不幸的是,std::initializer_list有一些你应该注意的怪癖(例如,无法从中移动元素(。