コンパイル時に可変個引数のテンプレート化されたクラスの N 番目のパラメーターを取得する最も簡単で一般的な方法は何だろうか(いくつかの最適化を行うために、戻り値はコンパイラーの static 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;
}