3

Is there any way to identify a type in a generic and portable way for serialization? I know std::type_index and std::type_info are platform dependent and can't be used for serialization.

One way would be to make a map between std::type_index and one "type information" and to serialize the "type information", but this will slow down the serialization.

Is there any standard way of doing this?

PS: I want to learn how to do efficient serialization, I don't want to use a library.

4

2 回答 2

1

如果您想将对象从一个进程传递到另一个进程,而这些进程恰好存在于不同的时间和不同的机器上,那么您所看到的比序列化更令人信服

那里有高效的消息传递库:Google 的Protobuf或 Apache 的Thrift就是很好的例子。

关键思想是将消息的定义外部化,使其与平台(和编译器)无关,然后从该定义生成代码绑定。然后从您的代码中,您将在内存中创建消息,序列化该消息(xml/json/binary),然后在另一个平台上将消息反序列化为另一个内存表示。

如果它感觉像是一个补充步骤,那就是它。另一方面,这意味着消息格式不再与内部实现(间接层......)绑定,因此您可以随意更改内部实现,同时仍然能够读/写消息在各种版本中(例如,用于与程序的旧部署版本进行交互)。

于 2013-02-09T16:12:51.200 回答
1

有没有办法以通用和可移植的方式识别类型以进行序列化?

它可以以通用但不可移植的方式进行。

从返回的字符串std::type_info::name()通常是唯一标识类型的错位类型名称。此名称可用于标识序列化对象的类型。

名称修饰因编译器而异,因此使用另一个编译器编译的程序可能无法读取序列化对象。

于 2013-02-09T14:33:05.853 回答