function_sig
の関数ポインタ配列が与えられているので、テンプレートパラメータを介してインデックスとなるテンプレート関数ポインタのセットに初期化したいと思います。これは可能ですか?0..N-1からインデックス付けされた関数テンプレートへのN個の関数ポインタの配列を初期化する方法は?
など。
template<int I>
void fn() { /* do something */ }
typedef void(*function_sig)();
template<int ARRAY_SIZE>
struct items
{
static function_sig array[ARRAY_SIZE];
};
template<int ARRAY_SIZE>
function_sig items<ARRAY_SIZE>::array = { /* what do I put here? */ };
ので、items<ARRAY_SIZE>::array
は{ fn<0>, fn<1>, ..., fn<ARRAY_SIZE-1> }
に初期化されるように、私は初期化子リストに入れることができる何かが、ありますか?
注:私はプリプロセッサの魔法でこれを行う方法を知っていますが、私はそれを試してみたいと思います。現在、配列を削除して配列のようなものに置き換える必要があると思っていますが、擬似配列のインデックスを作成するときにはO(N)の検索につながります。 dはしたくない。 C++ 14、int_seq
らstd::integer_sequence
らに有利に消えると
になるこれらのQ&Aのヘルプあなたのいずれかを行います:[C++ 11 constexprの配列へのstd ::リスト配列をフラット化](http://stackoverflow.com/questions/25068481/ c11-constexpr-flat-list-of-stdarray-into-array)または[Implementation C++ 14 make_integer_sequence](http://stackoverflow.com/questions/17424477/implementation-c14-make-integer-sequence)? – MicroVirus
@MicroVirus、これはおそらくC++ 11コンパイラ(VS2013)用です。私はまだそれらを読んで、私が何かを考え出すことができるかどうかを見ます。ありがとう。 – Adrian