首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++声明性解析序列化

C++声明性解析序列化
EN

Stack Overflow用户
提问于 2009-12-11 04:21:47
回答 4查看 1.1K关注 0票数 15

看看Java和C#,他们设法做了一些基于特殊的基于语言的处理(如果这是错误的名字,请原谅)。

在C++中,我们有两个问题:

1)没有办法用在运行时可访问的类型信息来注释类。

2)解析源代码以生成内容是一种非常复杂的方式。

但我在想,这可以通过一些模板元编程来实现,以实现与anotations相同的基本效果(仍在考虑)。就像专门针对不同类型的char_traits一样,xml_traits模板可以以一种解密的方式使用。这个特征类可以用来定义如何序列化/反序列化一个类,方法是专门化要序列化的类的特征。

示例思维:

代码语言:javascript
复制
template<typename T>
struct XML_traits
{
    typedef XML_Empty   Children;
};

template<>
struct XML_traits<Car>
{
    typedef boost::mpl::vector<Body,Wheels,Engine>   Children;
};

template<typename T>
std::ostream& Serialize(T const&)
{
    // my template foo is not that strong.
    // but somthing like this.
    boost::mpl::for_each<typename XML_Traits<T>::Children,Serialize>(data);
}
template<>
std::ostream& Serialize<XML_Empty>(T const&)
{ /* Do Nothing */ }

我的问题是:

有没有人看到过这样的项目/解压(不仅仅是XML),它使用这样的技术(模板元编程)来模拟Java和C#等语言中使用的注释概念,然后可以在代码生成中使用(通过使用解密风格有效地自动化任务)。

在我研究的这一点上,我正在寻找更多的阅读材料和例子。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-11 05:43:28

最近,我看了以下内容:

  • The Nocturnal Initiative提供了Avi Bar-Zeev
  • 的C++ Reflection system
  • C++ Runtime Type System,Maciej Sinilo

的博客帖子关于Reflection in C++(123)

仔细阅读:)

票数 7
EN

Stack Overflow用户

发布于 2009-12-11 06:43:37

有一本关于使用C++模板处理器的好书:

Andrei Alexandrescu现代C++设计泛型编程和设计模式应用Addison-Wesley,美国,2001年ISBN0-201-70431-5

Andrei开始使用C++模板编写程序!

票数 2
EN

Stack Overflow用户

发布于 2012-04-26 20:16:00

模板元编程是一个非常强大的工具,但事情很简单:您只需发明自己的附加语法来描述属性即可。

是的,解析C++很难,但我们只需要有限的解析功能:读取包含层次结构信息的类列表和所有序列化属性的列表。

即使在使用线性扫描算法的C/C++工具中,如果我们定义一些虚拟宏,也可以做到这一点。

模板可以抽象化类实例化,在此基础上我们添加了侵入式RTTI。

这项技术的完整描述在我对这个问题的回答中描述。

How to implement serialization in C++

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1883740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档