移動もコピーもできないタイプがあるとしましょう:
struct foo
{
explicit foo( size_t ){}
~foo(){}
foo( foo const & ) = delete;
foo( foo && ) = delete;
foo& operator=( foo const & ) = delete;
foo& operator=( foo & ) = delete;
};
コンパイル時に既知の数値 (N と呼びます) が与えられた場合、スタック上にこれらの「シーケンス」を作成し、それぞれを 0 から N-1 の数値で初期化する方法はありますか? foo[N]
私は C スタイルの array 、 a std::array< foo, N >
、またはおそらくstd::tuple
何らかの a で満足するでしょう。
私が避けようとしているのは、書き出すことです:
foo f0( 0 ), f1( 1 ), ... fNminus1( N-1 );
これがコンパイラーが私のためにできるべきことだと感じたとき。私が思いついた最高のものは、を使用することboost::optional
です。
boost::optional< foo > f[N];
for( size_t i = 0U; i < N; ++i )
f[i] = boost::in_place( i );
ただし、必要なすべての情報がコンパイル時に利用可能であるにもかかわらず、それはランタイム ロジックに依存します。さらに、ポインターの配列のように振る舞うものが残っています。