自C ++ 17起,我们获得了可选的模板参数包。但是我怎么在课堂上提到这个呢?有谁有很好的榜样吗?谢谢!
https://gcc.godbolt.org/z/485Z0J
template<auto...>
struct C { };
int main()
{
C<'C', 0, 2L, nullptr> x;
return 0;
}
https://en.cppreference.com/w/cpp/language/template_parameters
答案 0 :(得分:2)
首先是一些术语。那不是“可选模板参数包”。那是带有auto的可变参数非类型模板参数。
有几种引用它们的方法,但是您需要给可变参数一个名称。以下是一些示例:
#include <tuple>
template <class... Args>
auto foo(Args...) -> void;
template<auto... Args>
struct C
{
static constexpr std::tuple<decltype(Args)...> t{Args...};
auto call_foo()
{
foo(Args...);
}
};
auto test()
{
C<'C', 0, 2L, nullptr> x;
x.call_foo();
return std::get<2>(x.t);
}