2012-08-16 55 views
0

我从XML文件读取数据,这取决于xml文件中的标记,数据被附加到类成员变量。class member is not attached C++

是否有可能,例如,xml文件中的值包含“!”,在这种情况下这是无效的,因此我不能接受该值。 因此,该值的成员变量为空。

但某些成员变量的类型是其他类或整数或布尔值。我如何检查这些值是否设置?由于没有这些功能emtpy()

+1

对不起 - 没有示例代码和您正在使用的解析器,没有人可以帮助您。 – 2012-08-16 11:41:56

+1

请提供一些代码,因为您的描述充其量是令人困惑的,并且根本无法提供建设性的帮助。 – Graeme 2012-08-16 11:52:41

+0

不赞同downvotes。问题中唯一的问题就是术语。我们不会将数据“附加”到成员变量中;我们_assign_它,或者我们_initialize_他们。我们可以检查'int'是否被初始化,这完全可以。 – MSalters 2012-08-16 13:06:50

回答

2

如果它们不是可选的,那么当它们不存在时,必须导致解析机制出错。否则,你可以使用类似boost::optional的东西。

0

您可以在XML读取过程中检查XML值,如果它包含"!",则将默认值分配给它所在的任何变量。

例如将ptr设置为nullptr,布尔值为false,并将int设置为0-1

使用const默认值,只要你可以,这将使你的代码更清晰,更容易维护。

+0

这个问题被标记为C++,所以你可以而且应该使用'const'变量而不是'#define'。例如。不要使用NULL而是使用nullptr。 – MSalters 2012-08-16 13:08:37

+0

@ MSalters,这是正确的,我更新了我的文章。来自C .. – fduff 2012-08-16 13:50:35

0

在运行时无法检测变量是否已被明确设置。这就是为什么有些编译器会给你一个警告(不是错误),如果他们怀疑可能会使用未初始化的变量。

程序员有责任跟踪已设置的变量。低级别的做法是使用指针,将它们初始化为0,当它们指向一些已初始化的内存时更改它们,并在它们指向的对象被删除时将它们更改回0。

在C++中,您可以使用Boost.Optional来避免用这种方法搞乱指针。