我想解析一个简单的文本文件,并根据它包含的数据创建一个对象。为此,我使用了C++11 (而且我不太流利)。
如果出现任何类型的错误(例如缺少文件或无效文本),我希望告诉调用者我的解析函数出了什么问题,并提供了信息,比如发生了什么样的错误以及文件中的位置。
我不认为错误是在解析过程中发生的,所以异常似乎不是解决问题的方法。
我想返回一个包含所有信息的struct
,包括结果解析的对象,以防成功:
struct ParsingResult
{
bool success;
int errorCode;
int errorLine;
ParsedObject object;
}
但是,我不相信这个解决方案,因为如果出现错误,我仍然必须提供一个ParsedObject
。当然,我可以为此定义一个默认的构造函数,但从本质上讲,只有在解析成功时,ParsedObject
才有意义。
我可以将ParsedObject
更改为ParsedObject*
,但在没有必要时不愿意使用指针,我想知道这是否可以避免。
我的问题是:你能为这个问题提出更好的解决方案吗?那是什么?
发布于 2015-07-02 00:07:39
struct Obj
{
// your object from the data...
}
struct ParseError
{
int errorCode;
int errorLine;
}
class Parser
{
ParseError m_error;
// other things
public:
bool parse(const std::string& filename, Obj& parsedObject)
{
// Open file, etc...
//parsedObject.property1 = some_value;
// if something is wrong, set m_error and return false;
// return true if ok
}
ParseError getLastError() { return m_error; }
}
// in your code
Parser p;
Obj o;
if(!p.parse("filename", o))
{
// ParseError = p.getLastError();
}
https://stackoverflow.com/questions/31178655
复制相似问题