假设我有一种既不可移动也不可复制的类型:
struct foo
{
explicit foo( size_t ){}
~foo(){}
foo( foo const & ) = delete;
foo( foo && ) = delete;
foo& operator=( foo const & ) = delete;
foo& operator=( foo & ) = delete;
};
Run Code Online (Sandbox Code Playgroud)
现在给出一个在编译时已知的数字(称为N),有没有什么方法可以在堆栈上创建这些序列,每个都用数字0到N-1初始化?我会满足于C数组foo[N],一个std::array< foo, N >,或者甚至是std::tuple某种形式的.
我想避免的是写出来:
foo f0( 0 ), f1( 1 ), ... fNminus1( N-1 );
Run Code Online (Sandbox Code Playgroud)
当感觉这是编译器应该能够为我做的事情.我能想到的最好的就是使用boost::optional.
boost::optional< foo > f[N];
for( size_t i = 0U; i < N; ++i )
f[i] = boost::in_place( …Run Code Online (Sandbox Code Playgroud)