我想知道在编译时获取可变参数模板类的第 N 个参数的最简单和更常见的方法是什么(返回的值必须作为编译器的静态 const 才能进行一些优化)。这是我的模板类的形式:
template<unsigned int... T> MyClass
{
// Compile-time function to get the N-th value of the variadic template ?
};
非常感谢你。
编辑:由于 MyClass 将包含 200 多个函数,我无法对其进行专门化。但我可以专门化 MyClass 中的结构或函数。
编辑:从经过验证的答案得出的最终解决方案:
#include <iostream>
template<unsigned int... TN> class MyClass
{
// Helper
template<unsigned int index, unsigned int... remPack> struct getVal;
template<unsigned int index, unsigned int In, unsigned int... remPack> struct getVal<index, In,remPack...>
{
static const unsigned int val = getVal<index-1, remPack...>::val;
};
template<unsigned int In, unsigned int...remPack> struct getVal<1,In,remPack...>
{
static const unsigned int val = In;
};
// Compile-time validation test
public:
template<unsigned int T> inline void f() {std::cout<<"Hello, my value is "<<T<<std::endl;}
inline void ftest() {f<getVal<4,TN...>::val>();} // <- If this compile, all is OK at compile-time
};
int main()
{
MyClass<10, 11, 12, 13, 14> x;
x.ftest();
return 0;
}