将文本文件解析为对象时的错误处理
Error handling when parsing text file to object
我想解析一个简单的文本文件,并根据它所包含的数据创建一个对象。我使用的是C++11(我不太流利(。
如果出现任何类型的错误(例如丢失文件或无效文本(,我希望告诉解析函数的调用方出了什么问题,并提供诸如发生了什么类型的错误以及文件中的位置等信息。
我不认为在解析时会出现异常,所以似乎不应该出现异常。
我想返回一个包含所有信息的struct
,包括在成功的情况下解析的对象:
struct ParsingResult
{
bool success;
int errorCode;
int errorLine;
ParsedObject object;
}
然而,我不相信这个解决方案,因为在出现错误的情况下,我仍然必须提供ParsedObject
。当然,我可以为此定义一个默认构造函数,但从本质上讲,ParsedObject
只有在解析成功时才有意义。
我可以将ParsedObject
更改为ParsedObject*
,但在不必要的时候我不愿意使用指针,我想知道这是否可以避免。
我的问题是:你能为这个问题提出一个更好的解决方案吗?它是什么?
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();
}
您可以使用
unique_ptr<ParsedObject>
或
shared_ptr<ParsedObject>
在解析失败的情况下,可以将其默认构造函数与null进行比较。
避免原始指针将使您不必释放内存:(
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- posix_spawn():使用posix_scawn()时的错误处理问题
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 关于 istream 中的错误处理的问题
- 程序使用的 C 库中的错误处理C++
- C++ 错误检查 fstream open() 命令和一般字符串流错误处理
- 使用std::tie进行类似golang的错误处理,同时返回结果,是否有缺点?(C++11)
- Boost进程"系统"功能中的错误处理
- RPN计算器c++错误处理和多个运算符
- 提升精神 x3 错误处理程序与期望
- 构造函数中的错误处理而不会失败
- 当 C++ 中函数参数的输入类型(类)错误时的错误处理
- 关于 ocilib 错误处理的问题,如何使用 ocilib 正确捕获日志错误?
- 我可以使用 std::optional 进行错误处理吗?
- C++ main() 末尾关于错误处理的错误
- 抽象包装带有异常的 C 错误处理的最佳方法
- vwprintf错误处理(ERRNO显示0)
- C++ 使用枚举进行错误处理
- 在 C++ 中创建自己的错误处理机制