c++ - 有什么办法可以将设置/数组设置为方法参数吗?

标签 c++

目前我有一个功能:

void translate(std::string key, std::string& result, ...)
{
    char buffer[1024];
    va_list args;
    va_start(args, result);
    vsnprintf (buffer, sizeof(buffer), (loadedTranslations.find(key) != loadedTranslations.end() ? loadedTranslations[key] : "unknown").c_str(), args);
    va_end(args);

    result = buffer;

}

我在AMX插件中获取了一些数据,需要将它们传递到此函数中。有什么办法可以做到这一点?在JavaScript中,我可以执行translate(a, b, ...rest)之类的操作,它将起作用。有一些方法可以在C++中实现相同的结果吗?问题在于数据不是一种类型:可以有整数,浮点数和字符串。所以不可能使用std::forward(如果我正确理解了它的用例)。

最佳答案

尝试:

template <typename ... Args>
void translate(std::string key, std::string& result, Args&& ... args)
{
    // your code
}

以及您需要转发的任何地方,例如到函数foo:foo(std::forward<Args>(args)...)
我建议阅读更多有关variadic template和完美转发的信息。

关于c++ - 有什么办法可以将设置/数组设置为方法参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61175784/

相关文章:

c++ - main() 方法中包含的类

c++ - 普通的C++代码在一个测试项目中通过,而在主要项目中则失败

C++ - 套接字服务器线程

c++ - 监听套接字意外死亡

c++ - CLion 和 Crypto++ 库

c++ - 运行 OFX 插件

c++ - QList、QVector 或 std::vector 多线程使用

c++ - 对象的每个实例的方法是否在内存中重复?如果是这样,可以避免这种情况吗?

c++ - 在 std::set 中使用 operator != 作为 operator < 安全吗?

c++ - 在 ROOT 中迭代绘制 TEllipse