【发布时间】:2019-10-03 19:08:32
【问题描述】:
我正在解析大型 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)
【问题讨论】:
-
子元素和属性的本质区别在于属性通常是非常原始的类型,即不能有子元素的类型。但我建议你不要这样做。生成代码的系统的问题在于它们会生成代码。除了 DOM 之外,你不需要任何东西来处理 XML,如果你需要,你可能一开始就不需要 XML。
-
@user207421 谢谢,你是对的。然而,这些 XML 定义是众多产品的制造商为使用所述产品而提供的(考虑通过不同的通信协议进行设置)。因此,虽然 XML 不是正确的工具,但它是我拥有的工具 :)
-
有没有办法清楚地将成员标记为“元素”或“属性”?您甚至可以将原始类型包装在包装器中以重新标记属性。例如。
template <typename T> struct AttrT { T value; };。你可以简单地做文档。这在 cmets 中也是如此。我的问题是为什么你需要知道数据来自哪里? -
由于您可以完全控制设计这个类,是的,有一定的“注释类成员的方法,以便清楚所讨论的成员是属性还是元素”。您只需实现它,无论哪种方式适合您。您的具体 C++ 问题到底是什么?
-
@SamVarshavchik 我的问题特别是关于在 C++ 中实现它的好方法,如您所见,问题不在于“设计类”,而是在一个类中,成员有不同除了它们的类型或名称之外的含义。因此,问题是,在 c++ 中实现这种区别的最佳或好的方法是什么。
标签: c++ xml c++11 annotations