如何定义可以保存可变模板参数的 class?
How to define a class that can save variadic template arguments?
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);
}
我的编译器是 clang 5.0
和 -std=c++1z
。
在这种情况下如何定义可以保存可变参数模板参数的class?
据我所知这是不可能的。您必须使用 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_);
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);
}
我的编译器是 clang 5.0
和 -std=c++1z
。
在这种情况下如何定义可以保存可变参数模板参数的class?
据我所知这是不可能的。您必须使用 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_);