假设我有一个既不能移动也不能复制的类型:
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 风格的数组、astd::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 );
但这依赖于运行时逻辑,即使所有必需的信息在编译时都可用。另外,我还剩下一些行为类似于指针数组的东西。