如何从可变参数模板参数创建 std::tuple<> ?

Láz*_*olt 4 c++ templates variadic-functions visual-c++ variadic-templates

我有一个使用此模板声明的类:template <typename ...Args>。在其中,我有一个声明为std::vector<std::tuple<Args...>> vec;存储模板指定的数据条目的列表。我还有一个函数声明如下:

void AddVertex(Args... data)
{
    // vec.push_back(std::tuple<Args...>(data));
}
Run Code Online (Sandbox Code Playgroud)

在此函数中,我想将 Args... 元组添加到向量中。这可能吗?我尝试使用注释中的代码,但编译器给我一个错误,指出“参数包必须在此上下文中扩展”。

解决方案不起作用,因为元组的模板参数已经扩展。

raf*_*x07 5

您需要扩展两者:

  • 模板参数包 ( Args...)

  • 函数参数pack( data...):

所以应该是:

    vec.push_back(std::tuple<Args...>(data...));
Run Code Online (Sandbox Code Playgroud)

或者更短的形式,使用make_tuple

    vec.push_back(std::make_tuple(data...));
Run Code Online (Sandbox Code Playgroud)