C ++从参数参数包创建向量或列表

时间:2018-03-27 09:37:46

标签: c++ vector c++14 variadic-templates c++17

我正在寻找一个解决方案,将User个对象的参数组合成一个可迭代std::vectorstd::list

auto user_group = create_user_group(User(), User(), User(), User());

实施例

template <typename ...Users>
auto create_user_group(Users&&... users)
{
    return std::vector<Users...>{std::forward<Users>(users)...};
}

错误

error: wrong number of template arguments (4, should be at least 1)
  return std::vector<Users...>{std::forward<Users>(users)...};

2 个答案:

答案 0 :(得分:4)

您需要将单个参数分隔为传递给std::vector

template <typename User, typename ...Users>
auto create_user_group(User &&user, Users&&... users)
{
    return std::vector<std::decay_t<User>>{
        std::forward<User>(user), std::forward<Users>(users)...
    };
}

答案 1 :(得分:1)

如果“用户”有不同的类型,那么您需要一个类型列表。幸运的是,C ++有tuple可以用作类型列表:

template <typename ...Users>
decltype(auto)
create_user_group(Users&&... users) {
  return std::make_tuple(std::forward<Users>(users)...);
}

Live Demo