我正在处理一个需要键和值类型的模板化键/值存储类,并将它们在内部存储为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“最小化大小”。
有没有办法在 a 的上下文中使结构被认为是“无大小的” std::pair
?