我想定义一个结构,例如type,这个sizeof(type)结构不低于某个值.
动机:
我有一个向量std::vector<type>,我将从中删除一些元素.此外,我已将某些元素的索引保存到其他位置,因此我希望将其标记为未使用并在将来重用它.这导致我将下一个可用位置保存为删除位置中的列表.因此,sizeof(type)应该不低于sizeof(size_t)并且type应该正确对齐.
可能的解决方案:
boost::variant<type, size_t>
从我的角度来看,这有两个问题.如果我use boost::get<type>,性能将显着下降.如果我使用boost::apply_visitor,语法会很奇怪,性能也会根据我的个人资料而降低.
union{type t; size_t s;}
除了两个不足之外,这当然有效.首先,引用成员的语法type会更加混乱.其次,我必须为此联合定义构造函数,复制构造函数等.
扩展type的char[sizeof(size_t) - sizeof(type)]
这几乎满足了我的要求.但是,这种长度为零的数组的风险是c ++标准不支持的,并且可能是错误的对齐.
因为我不会用type的size_t时候,我想只是确保我可以用reinterpret_cast<size_t>在需要的时候.
补语
阅读评论后,我认为应该是我的问题的最佳解决方案boost::variant.但我仍然想知道是否有办法结合解决方案2和3的好处,即
一个.我可以type无需更改即可访问成员.
湾 获得有效的保证reinterpret_cast<size_t>.
您可以通过以下方式减轻对解决方案 3 的担忧:
struct data
{
// ...
};
template<class T, bool> class pad_;
template<class T> class pad_<T, true> { char dummy[sizeof(T) - sizeof(data)]; };
template<class T> class pad_<T, false> {};
template<class T> using pad = pad_<T, (sizeof(T) > sizeof(data))>;
class type : public data, pad<size_t>
{
// ...
};
Run Code Online (Sandbox Code Playgroud)
这段代码:
pad可以从type布局中完全优化sizeof(data) >= sizeof(size_t)| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |