我有一个无法解决的问题。假设我有这个地图定义:
map<string, int16_t> Registers;
但有时,我需要存储一个未签名的int16_t而不是一个已签名的int16_t。
我怎样才能做到这一点?
谢谢。
最佳答案
您可以使用更大的鱼类型(例如int32_t
),也可以使用boost::variant
。int32_t
可以存储int16_t
或uint16_t
可以存储的所有值,并且保留例如32768和-32768之间的差异(假设为二进制补码)。如果对int16_t
和uint16_t
使用了某些强制转换方案,则两者之间的差异将丢失,因为两者都将存储为0x8000。区分0x8000之类的值将需要带外信息,如果有,您将不会提及。
但是,int32_t
不会保留32767有符号和32767无符号之间的差异。如果那很重要,那么boost::variant
可以保留该信息。