您是否听取了<条码>boost:optional?
我必须承认,我不清楚这里的真正问题......但促进的是:选择允许按价值储存,但知道实际记忆是否已经启动。 我也允许进行建筑和销毁,这样就能够成为一种适合我的想法。
www.un.org/Depts/DGACM/index_spanish.htm
我认为,我最后抓住了这个问题:你希望能够把许多物体分配给各个记忆点,你想知道,现在的记忆是否真的带有物体。
不幸的是,你的解决办法是一个巨大的问题:它是错误的。 如果有的话,则。 在某些方面,可以用<代码>null<>/code> 借方模式表示,然后,你就认为它是一个统一的记忆。
你们将不得不放弃,至少增加一线信息。 在增长率仅为3%之后,这一增长并不真的(43比4比特)。
例如,你可以使用一些缩略语<代码>boost:optional,但采用阵列方式(以避免dding损失)。
template <class T, size_t N>
class OptionalArray
{
public:
private:
typedef unsigned char byte;
byte mIndex[N/8+1];
byte mData[sizeof(T)*N]; // note: alignment not considered
};
之后,它简单地说:
template <class T, size_t N>
bool OptionalArray<T,N>::null(size_t const i) const
{
return mIndex[i/8] & (1 << (i%8));
}
template <class T, size_t N>
T& OptionalArray<T,N>::operator[](size_t const i)
{
assert(!this->null(i));
return *reinterpret_cast<T*>(mData[sizeof(T)*i]);
}
<>note:为了简明起见,我没有审议一致性问题。 如果你不了解这个主题,在回忆之前阅读: