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( size の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 =デフォルトの配置>

default-alignmentの値は、サイズがLen(3.9)以下の C++ オブジェクト型に対する最も厳しいアライメント要件です 。Lenメンバーの typedef 型は、サイズが最大で、アラインメントが の約数であるオブジェクトの初期化されていないストレージとして使用するのに適した POD 型でなければなりませんAlign

したがって、以下のサイズのオブジェクトはすべて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 に答える