Mar*_*ork 14 c++ xml serialization metaprogramming declarative
看看Java和C#,他们设法根据基于特殊语言的anotation做一些邪恶的处理(如果这是不正确的名字,请原谅我).
在C++中,我们有两个问题:
1)无法使用在运行时可访问的类型信息来注释类.
2)解析源以生成东西是复杂的方法.
但我认为这可以通过一些模板元编程来完成,以实现与anotations相同的基本效果(仍然只是考虑它).与专门针对不同类型的char_traits一样,xml_traits模板可以以明确的方式使用.此traits类可用于通过专门化您尝试序列化的类的特征来定义类的序列化/反序列化方式.
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 */ }
Run Code Online (Sandbox Code Playgroud)
有没有人看到任何项目/ decumentation(不仅仅是XML)使用这样的技术(模板元编程)来模拟在Java和C#等语言中使用的注释概念,然后可以在代码生成中使用(以有效地自动化)使用声明式的任务).
在我的研究的这一点上,我正在寻找更多的阅读材料和例子.
最近,我看了下面的内容:
读得好:)
归档时间: |
|
查看次数: |
1080 次 |
最近记录: |