看看Java和C#,他们设法做了一些基于特殊的基于语言的处理(如果这是错误的名字,请原谅)。
在C++中,我们有两个问题:
1)没有办法用在运行时可访问的类型信息来注释类。
2)解析源代码以生成内容是一种非常复杂的方式。
但我在想,这可以通过一些模板元编程来实现,以实现与anotations相同的基本效果(仍在考虑)。就像专门针对不同类型的char_traits一样,xml_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 */ }我的问题是:
有没有人看到过这样的项目/解压(不仅仅是XML),它使用这样的技术(模板元编程)来模拟Java和C#等语言中使用的注释概念,然后可以在代码生成中使用(通过使用解密风格有效地自动化任务)。
在我研究的这一点上,我正在寻找更多的阅读材料和例子。
发布于 2009-12-11 05:43:28
最近,我看了以下内容:
的博客帖子关于Reflection in C++(1,2,3)
仔细阅读:)
发布于 2009-12-11 06:43:37
有一本关于使用C++模板处理器的好书:
Andrei Alexandrescu现代C++设计泛型编程和设计模式应用Addison-Wesley,美国,2001年ISBN0-201-70431-5
Andrei开始使用C++模板编写程序!
发布于 2012-04-26 20:16:00
模板元编程是一个非常强大的工具,但事情很简单:您只需发明自己的附加语法来描述属性即可。
是的,解析C++很难,但我们只需要有限的解析功能:读取包含层次结构信息的类列表和所有序列化属性的列表。
即使在使用线性扫描算法的C/C++工具中,如果我们定义一些虚拟宏,也可以做到这一点。
模板可以抽象化类实例化,在此基础上我们添加了侵入式RTTI。
这项技术的完整描述在我对这个问题的回答中描述。
https://stackoverflow.com/questions/1883740
复制相似问题