关于支持和处理多个不同整数大小的一般性问题,以及它们是否应被视为独立类型(如string vs int)或另一个的子集。具体来说,我正在考虑uint8_t和uint32_t。
我想构建一个消息对象,我将用它来通过网络发送消息。在最简单的情况下,它将有一个包含有效载荷大小和有效载荷的标题。我有3种类型的数据要发送。
(实际上我也使用标题的一位来标记它是int还是字符串类型,但这在这里并不重要。)
在创建我的消息对象时,显然我将字符串视为与整数不同,并且它有自己的构造函数来创建原始消息。我正在尝试确定处理不同类型整数的最佳实践。
我可以:
最终我想支持1,2,4和8字节的整数,并且不喜欢构造函数中的扩散的想法,如果我选择1,当我可以有一个通用构造函数时,我会得到测试我传递的值以确定它应该是什么类型。但是我想做“正确”的事情。所以我的问题是......应该将uint8_t和uint32_t视为单独的类型,就像字符串和uint8_t一样。或者将uint8_t视为uin32_t的子集是一种好习惯吗?
答案 0 :(得分:0)
正如我在评论中所说,第一个选项更好,因为它使用了您拥有的类型信息。无需为uint8
,uint32
和其他人创建不同的消息构造函数;模板可以帮到你。
这是一个通用消息构造函数的示例,适用于所有POD类型:
template <typename T, typename = std::enable_if<std::is_pos<T>::value, void>::type>
message create_message (T const & x)
{
message m;
m.write(&x, sizeof(T));
return m;
}
(我假设您的message
类型有一些方法,例如write(void*, size_t)
)