c++ - 在 C++ 中,具有任意数量参数的 Java 函数等于什么?

标签 c++

<分区>

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

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 有一些您应该注意的怪癖(例如,不能从中移动元素)。

关于c++ - 在 C++ 中,具有任意数量参数的 Java 函数等于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49257789/

相关文章:

c# - 将数据从 C++ 传递到 C# 的最有效方法

c++ - 如何优雅地将字符串从 ifstream 复制到 vector<string>?

c++:新返回一个类型但编译正常

c++ - 在没有共享 COM 对象的情况下使用 COM STA 或 MTA?

c++ - 如何从 GLUT 坐标转换为窗口坐标

c++ - 使用 Cppcheck 检查非标准文件扩展名

c++ - 覆盖文件中的字节而不清除它

c++ - 查找句柄打开的位置

c++ - 将指针传递给成员函数

c++ - 使用 QProcess 查询