如何定义可以保存可变参数模板参数的类

How to define a class that can save variadic template arguments?

本文关键字:参数 变参 保存 何定义 定义      更新时间:2023-10-16
template<typename... Args>
struct A
{
    Args&... args_;
    //
    // error : only function and template parameters can be parameter packs
    //
    A(Args&... args) : args_(args)
    {}
};
int main()
{
    auto a = A(1, 2, 3);
}

我的编译器与-std=c++1z clang 5.0.

在这种情况下,如何定义可以保存可变参数模板参数的类?

据我所知,这是不可能的。您必须使用std::tuple来存储参数:

template<typename... Args>
struct A
{
    std::tuple<std::decay_t<Args>...> args_;
    A(Args&&... args) : args_(std::make_tuple(std::forward<Args>(args)...))
    {}
};

从 C++17 开始,您可以使用 std::apply 来计算以 args_ 作为参数的函数,而不是解压缩它们:

std::apply(func, args_);