看看 Java 和 C#,他们设法根据基于特殊语言的注释进行了一些邪恶的处理(如果名称不正确,请原谅我)。
在 C++ 中,我们有两个问题:
1) 无法使用在运行时可访问的类型信息来注释类。
2)解析源来生成东西是很复杂的。
但我认为这可以通过一些模板元编程来实现与注释相同的基本效果(仍在考虑它)。就像专门针对不同类型的 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 */ }
我的问题是:
有没有人见过任何项目/decumentation(不仅仅是XML)使用这样的技术(模板元编程)来模拟Java和C#等语言中使用的注释概念,然后可以在代码生成中使用(有效地自动化使用声明式风格的任务)。
在我的研究中,我正在寻找更多的阅读材料和例子。