2

キーと値の両方の型を必要とするテンプレート化されたキー/値ストレージ クラスを扱っており、std::pair. ただし、キーのみを格納し、このクラスのインデックスを利用したい場合が見つかりました。キーと値のペアではなくキーのみを処理する (または多くのスペースを浪費する) ようにするには、このことを完全にリファクタリングする必要があるため、std::pairオブジェクトに空の構造体 (または他のもの)を持たせる方法があるかどうか疑問に思っていました。 、ペアの他のタイプと同じ量のスペースしか占有しません。

私はこれでそれを試しました:

struct EmptyStruct
{
};

そしてこれを実行しました:

typedef std::pair<int, EmptyStruct> TestPair;
std::cout << sizeof(TestPair) << " vs " << sizeof(int) << "\n";

しかし、この出力を得ました:

8 vs 4

VC++ 2012 の「リリース」モードで、/O1「サイズの最小化」を含む最適化が有効になっています。

のコンテキストで構造体を「サイズなし」と見なす方法はありstd::pairますか?

4

4 に答える 4

7

でそれを行うことはできませんstd::pairが、Boost compress_pairを使用します。

圧縮を使用して独自の完全準拠のpairテンプレートを作成する前に、これは見た目よりも難しいことに注意してください。

于 2012-12-04T17:09:25.077 に答える
4

std::pair のコンテキストで構造体を「サイズレス」と見なす方法はありますか?

いいえ:クラスの個別のインスタンスには、個別の/識別可能なアドレスが必要なため...最小(ゼロ以外)のサイズがあります。

于 2012-12-04T17:07:40.483 に答える
1

それを行う方法はありませんがstd::pair、独自の構造を作成するのはかなり簡単です – <code>compressed_pa​​ir はそれを行います: どちらかの型が空である場合、ただ 1 つのメンバーを保持するためにテンプレートを特殊化します。

そのようなタイプのライブラリー SeqAn があります。

于 2012-12-04T17:09:16.577 に答える
1

pair2 番目のタイプがEmptyStruct

于 2012-12-04T17:10:16.443 に答える