Интересно, что самый простой и распространенный способ получить N-й параметр вариационного шаблонного класса во время компиляции (возвращаемое значение должно быть как static const для компилятора чтобы сделать некоторые оптимизации). Вот форма моего шаблона:
template<unsigned int... T> MyClass
{
// Compile-time function to get the N-th value of the variadic template ?
};
Большое спасибо.
EDIT: поскольку MyClass будет содержать более 200 функций, я не могу его специализировать. Но я могу специализировать структуру или функцию внутри MyClass.
EDIT: окончательное решение, полученное из утвержденного ответа:
#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;
}