假设我有以下场景,其中我正在打印
std::size_t
类型的模板。
template<std::size_t st>
void print_sizes(){std::cout<<st<<std::endl;}
template<std::size_t st, std::size_t M, std::size_t... Rest>
void print_sizes(){
std::cout<<st<<std::endl;
}
int main(){
print_sizes<10, 12, 3>();
return 0;
}
以上内容完全有效。但是,我想知道是否有一种方法可以存储
10,12,3
可变参数模板,如下所示:
template<std::size_t st>
void print_sizes(){std::cout<<st<<std::endl;}
template<std::size_t st, std::size_t M, std::size_t... Rest>
void print_sizes(){
std::cout<<st<<std::endl;
print_sizes<M, Rest...>();
}
using example = 10,12,3;
int main(){
print_sizes<example>();
return 0;
}
显然,这不起作用并会引发错误。有没有办法做这样的事情?
你不能轻易存储
10, 12, 3
参数包,但你可以存储实例化的模板:
#include <iostream>
template<std::size_t st>
void print_sizes(){std::cout<<st<<std::endl;}
template<std::size_t st, std::size_t M, std::size_t... Rest>
void print_sizes(){
std::cout<<st<<std::endl;
print_sizes<M, Rest...>();
}
int main(){
auto f = print_sizes<10, 12, 3>; // save instantiated template
f(); // invoke it.
return 0;
}