【发布时间】:2013-01-30 09:23:06
【问题描述】:
我想知道是否没有人使用联合来序列化 boost::asio 发送方/接收方的结构。我已经搜索过一些东西,但我发现的(目前)都是this 或this 之类的例子。
所以我这样做了:
struct ST {
short a;
long b;
float c;
char c[256];
}
...
void sender::send(const ST &_packet) {
union {
const ST &s;
char (&c)[sizeof(ST)];
}usc = {_packet};
socket.send_to(boost::asio::buffer(usc.c, sizeof(ST)), endpoint);
}
...
ST var = {1234, -1234, 1.4567, "some text"};
sercer.send(var);
所以我现在的问题是,对基本数据类型进行序列化是不好的做法吗?
我知道我不能直接发送 var 大小的字符串,因此我可以使用 boost::serialization。
【问题讨论】:
-
恕我直言,是的,这太可怕了。为什么不直接将
static_cast发送到void*,然后通过它。它会更具可读性,并且更能代表您似乎正在尝试做的事情。 -
我认为这是一种不好的做法,因为您违反了严格的别名规则并因此调用了未定义的行为。不过,按照激进 7 的建议使用 static_cast 也无济于事。
标签: c++ serialization boost boost-asio unions