c++ - 可变参数模板错误 : "parameter pack must be expanded"

标签 c++ variadic-templates

这是我编写的可变参数模板函数:

template<class Container, class Value, class... Args>
Value& insert(Container& c, Args&&... args) {
    c.emplace_back(args);
    return c.back();
}

当我像这样使用 insert 时出现错误:

list<int> lst;
int& num = insert<list<int>, int, int>(lst, 4);

错误提示 insert 正文中的这一行:

c.emplace_back(args); // <= 'args' : parameter pack must be
                      //             expanded in this context

这是什么意思,我该如何解决?

最佳答案

错误是由于在将所有单个参数(而不是参数包)传递给 emplace_back< 时在 args 之后缺少省略号 (...)/

固定(和改进)版本:

template<class Container, class... Args>
auto insert(Container& c, Args&&... args) -> decltype (c.back()) {
    c.emplace_back(std::forward<Args>(args)...);
    return c.back();
}

关于c++ - 可变参数模板错误 : "parameter pack must be expanded",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20588191/

相关文章:

c++ - C2664 错误 C++ Visual Studio

c++ - 使用unique_ptr的链表的弹出方法

c++ - 如何将函数应用于可变列表的每个组件并返回可变列表?

c++ - 如何在 std::tuple 中合并 std::unordered_map?

c++ - 可变参数模板的可变参数初始化

c++ - 使用minGW让Notepad++编译运行C++程序

c++ - 在类中声明 vector 的大小

c++ - 打印带有千位和百万位分隔符的整数

c++ - 使用可变参数模板的随机选择器函数——这可能吗?

c++ - 在可变参数模板类中初始化数组