如何使STL对与一种类型的"空结构"只占用其他类型的空间?

use*_*342 2 c++ data-structures

我正在处理一个模板化的键/值存储类,它需要键和值类型,并在内部将它们存储为std::pair.但是,我发现了一个案例,我只想存储一个键,并仍然利用这个类的索引.我需要完全重构这个东西来处理只有一个键而不是一个键/值对(或浪费大量的空间),所以我想知道是否有办法让一个std::pair对象采用一个空结构(或其他东西) ,并且只占用与该对中的其他类型相同的空间量.

我试过这个:

struct EmptyStruct
{
};
Run Code Online (Sandbox Code Playgroud)

跑了这个:

typedef std::pair<int, EmptyStruct> TestPair;
std::cout << sizeof(TestPair) << " vs " << sizeof(int) << "\n";
Run Code Online (Sandbox Code Playgroud)

但得到了这个输出:

8 vs 4
Run Code Online (Sandbox Code Playgroud)

在VC++ 2012中,在"发布"模式下启用了优化,包括/ O1"最小化大小".

有没有办法让一个结构在一个std::pair?的背景下被认为是"无大小的" ?

pmr*_*pmr 7

你不能这样做std::pair,但使用Boost compressed_pa​​ir.

在您开始pair使用压缩编写自己的完全符合模板之前,请注意这比看起来更难.