【发布时间】:2018-05-21 14:03:18
【问题描述】:
通过一个例子来解释我的意思可能更容易。想象以下模板:
template <class... Args>
std::tuple<Args...> foo();
它可以被调用,例如,像这样:
auto ret = foo<int, bool>();
但是如果我想根据可变参数模板参数的数量向函数传递额外的参数怎么办?例如,假设我想为每个 Args 传递一个字符串文字:
auto ret = foo<int, bool>("a", "b");
这样做的问题是,似乎无法扩展非可变参数,因此以下显然无法编译:
template <class... Args>
std::tuple<Args...> foo(const char*... names);
有什么合理的方法可以实现吗?
【问题讨论】:
-
参加
std::tuple? -
在这种情况下不需要元组,因为所有类型都是相同的类型。我可以使用 initializer_list,但问题是关于一个参数。
-
你仍然可以使用可变参数模板,而不是使用静态断言来确保这些参数是允许的类型。