是否可以为模板提供可变参数列表,或根据提供的参数列表自动生成规范

  • 本文关键字:列表 参数 自动生成 变参 是否 c++ templates
  • 更新时间 :
  • 英文 :


假设我有以下tuple:

std::tuple<int, int, int> setVals(int val)
{
return std::make_tuple(val, val, val);
}

有这样的结构化绑定真的很好:auto [x, y, z] = setVals(42);

是否可以为setVals提供某种可变签名,这样我就可以使用任何数量的变量进行结构化绑定?例如,auto [x, y] = setVals(42);auto [x, y, z, x2, y2, z2] = setVals(42);

我知道我可以使用一个可变函数模板,在那里我可以声明一些int并将它们作为引用传递,但结构化绑定非常方便,我想知道我刚才展示的东西是否可能。如果这个问题不好,我很抱歉。

您可以创建一个想要的函数,但必须指定元组的元素数量作为模板参数。这会给你这样的代码:

// does the actual creation
template <typename T, std::size_t... Is>
auto create_tuple_helper(const T& initial_value, std::index_sequence<Is...>)
{
// this ueses the comma expression to discard Is and use initial_value instead for each element
return std::tuple{(void(Is), initial_value)...};
// void(Is) is used to get rid of a warning for an unused value
}
// this is a wrapper and makes it easy to call the helper function
template <std::size_t N, typename T>
auto create_tuple(const T& initial_value)
{
return create_tuple_helper(initial_value, std::make_index_sequence<N>{});
}
int main()
{
auto [a, b, c, d] = create_tuple<4>(42);
std::cout << d;
}

实例

最新更新