位置N(Nはコンパイル時に既知)で可変個引数テンプレート定数引数の値を取得する正しい方法を知りたいです。たとえば、可変個引数の関数ポインターを引数として受け取るテンプレートがあり、2番目の関数ポインターを取得する必要があるとします。今のところ、私が思いついたのはこれだけです...
typedef int (*func)(int);
template< func... F >
struct testme
{
inline int getme(int p) const
{
return std::array< func , sizeof... (F) >{F...}[1](p);
}
};
...言うまでもなく、これは非常にハックです。これを行うためのより良い方法はありますか?ありがとう。
編集:
typedeftemplateのコードに基づいて、可変個引数テンプレートの引数として任意の型を受け入れることができるバージョンを作成しました。GCC4.6の実験的なビルドで動作することがテストされています。私はそれが他の誰かに役立つかもしれないと思ったので、そこにあります...
template< std::size_t I, typename T, T... Args >
struct va_lookup;
template< std::size_t I, typename T, T Arg, T... Args >
struct va_lookup< I, T, Arg, Args... >
{
static_assert(I <= sizeof... (Args), "index is out of bound");
static constexpr T value = va_lookup< I - 1, T, Args... >::value;
};
template< typename T, T Arg, T... Args >
struct va_lookup< 0, T, Arg, Args... >
{
static constexpr T value = Arg;
};