C++ 如何在不使用模板的情况下使用带字符串的变量函数?

C++ 如何在不使用模板的情况下使用带字符串的变量函数?,c++,variadic-functions,C++,Variadic Functions,我有以下模板功能: struct ms { template <typename... Args> void update(string& query, Args&... args); }; template <typename... Args> void ms::update(string& query, Args&... args) { const int size = sizeof...(args);

我有以下模板功能:

struct ms {
    template <typename... Args>
    void update(string& query, Args&... args);
};

template <typename... Args>
void ms::update(string& query, Args&... args)
{
    const int size = sizeof...(args);
    vector<string> vec = { args... };
    for (int i = 0; i < size; ++i) {
        cout << query << ": " << vec[i] << endl;
    }
}

如果存在args参数,我将如何迭代这些参数?

这是一个
数组视图

你这样称呼它:

ms{}.update( "Hello", {"one", "two", "three"} );


作为一个更糟糕的例子,简单地以一个
std::vector
为例

在呼叫点

ms{}.update( "Hello", {"one", "two", "three"} );

同样有效。与我的解决方案不同,这会导致内存分配。

为什么不直接传递一个字符串容器,例如
std::vector
?直接获取
vector
?模板版本实际上有什么问题?嗯,你可以使用省略号和
va_-args
之类的东西,但我不建议这样做。你可以使用初始化器列表
void update(std::initializer\u-list-args)
不,不要使用va_-arg。使用向量,使用初始值设定项列表,使用模板,但不要使用va_arg。这是一堆不安全的车库。
struct ms {
  void update(string const& query, array_view<string const> args);
};
void ms::update(string const& query, array_view<string const> args)
{
  for (int i = 0; i < args.size(); ++i) {
    cout << query << ": " << args[i] << endl;
  }
}
ms{}.update( "Hello", {"one", "two", "three"} );
ms{}.update( "Hello", {"one", "two", "three"} );