Самый простой способ получить N --й аргумент шаблонного класса с переменным числом аргументов?

Интересно, какой самый простой и распространенный способ получить N -th параметр шаблонного класса с переменным числом аргументов во время компиляции -(Возвращаемое значение должно быть статической константой для компилятора, чтобы выполнить некоторые оптимизации ). Вот форма моего шаблонного класса:

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;
}
16
задан Vincent 4 August 2012 в 20:07
поделиться