0

为了测试特定类型是否适合aligned_storage,我创建了以下测试结构:

template< typename T, std::size_t Bytes >
struct fits_in_storage : public std::integral_constant<bool, sizeof(std::aligned_storage<Bytes>::type) >= sizeof(std::aligned_storage<sizeof(T)>::type)>
{};

现在我有点想知道这样的测试是否/将出现在标准库中。不愿重新发明轮子。

我正在使用它来检查定义aligned_storage的(大小Bytes)标头是否可以采用内部数据类型,该数据类型仅在实际编译单元中可用。

4

1 回答 1

1

除了至少有字节aligned_storage<Len, Align>::type之外,不能保证其他的大小。有可能(但不太可能)较小的 大于较大的. Len::typeLenLen

[meta.trans.other] 状态,对于

aligned_storage<std::size_t Len, std::size_t Align =默认对齐>

对于大小不大于 (3.9)的任何 C++ 对象类型, default-alignment的值应是最严格的对齐要求。Len成员 typedef 类型应该是一个 POD 类型,适合用作任何对象的未初始化存储,其大小至多LenAlign.

因此,任何大小小于或等于 的对象Len都可以存储在aligned_storage<Len>::type. 因此,您的检查可以简化为:

template< typename T, std::size_t Bytes >
struct fits_in_storage
    : public std::integral_constant<bool, (Bytes >= sizeof(T))>
{};

当然,这可以简化为Bytes >= sizeof(T).

于 2013-09-30T14:15:44.710 回答