我正在解析大型XML定义文件。 为此,我已经开始为xml文件中可能遇到的每种“类型”创建类。
<Element Factor="10">Whatever</Element>
当前,我将XML文件中的每个type
放在它自己的类中,其中包含一些运算符和该类型的成员。
但是,其中一些types
同时具有“子元素”和“属性”。
即:
<MySimpleType min="20" max="100">
<name>MyName</name>
<SomeOtherElement>xxxx</SomeOtherElement>
</Mysimpletype>
当前该类如下:
class MySimpleType{
std::string MyName;
TSomeOtherElement SomeOtherElement;
int min;
int max;
}
我想知道是否有一种方法可以对类成员进行注释,以使所涉及的成员是属性还是元素都变得很清楚。
元素可以具有不同的类型(可以是另一个自定义类),并且属性主要是内置的或ADT的。
有没有一种方法可以清楚地将成员标记为“元素”或“属性”?
(这很重要,我正在将Visual Studio 2015与内置编译器一起使用,所以我正在使用c ++ 11)
答案 0 :(得分:3)
您可能需要一些包装类型来帮助识别:
template <typename T>
struct attribute { T value; };
等等
struct MySimpleType
{
std::string MyName;
TSomeOtherElement SomeOtherElement;
attribute<int> min;
attribute<int> max;
};
您可以丰富包装类,使其表现得更像基础类型(operator T&()
,operator = (const T&)
,...)
答案 1 :(得分:1)
您可以使用c ++ 11属性来标记您的字段:
class MySimpleType {
[[fmashiro::element]] std::string MyName;
[[fmashiro::element]] TSomeOtherElement SomeOtherElement;
[[fmashiro::attribute]] int min;
[[fmashiro::attribute]] int max;
};
尽管这会生成有关未知属性的警告。
另一种常见方法是使用空宏:
#define FM_ELEMENT
#define FM_ATTRIBUTE
class MySimpleType{
FM_ELEMENT std::string MyName;
FM_ELEMENT TSomeOtherElement SomeOtherElement;
FM_ATTRIBUTE int min;
FM_ATTRIBUTE int max;
};
作为最后的选择,只需在声明中添加/* attribute */
注释。