C 类 ID 的序列化实现
序列化是软件开发中的一项重要技术,用于以可用于存储对象状态的格式轻松传输和存储。传统上,C 中的常见方法是使用类 ID 进行序列化。这涉及定义基类和派生类,以及实现将序列化和反序列化路由到适当的类的 switch 语句。
但是,使用类 ID 进行序列化引起了人们的关注。一些开发人员认为它提倡反模式并违反面向对象 (OO) 原则。
替代方法
Boost Serialization 提供了类 ID 的替代方案。该库为对象序列化提供了一个健壮且编写良好的框架。通过使用 Boost Serialization,开发人员可以避免基于类 ID 的序列化的缺点。
带有可注册类的工厂模式
另一种方法是使用带有可注册类的工厂模式类。这涉及创建一个将键映射到模板创建器函数的工厂。当需要创建一个新类时,指向创建者函数的指针将插入到映射中。
这是工厂类的简化 C 实现:
<code class="cpp">template<typename K, typename T> class Factory { std::map<K, T *(*CreateObjectFunc)()> mObjectCreator; public: template<typename S> void registerClass(K id) { mObjectCreator.insert(std::make_pair(id, &createObject<S>)); } T* createObject(K id) { typename std::map<K, CreateObjectFunc>::iterator iter = mObjectCreator.find(id); if (iter == mObjectCreator.end()) { return NULL; } return ((*iter).second)(); } };</code>
这种方法允许在运行时注册新类,并简化基于键的对象创建过程。
虽然这两种方法都不是 C 标准,但 Boost Serialization 和带有可注册类的工厂模式为传统类 ID 提供了可行的替代方案C 中的基于序列化。
以上是C 中的类 ID 序列化是一种过时的做法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!