【发布时间】:2016-09-10 15:30:07
【问题描述】:
我正在尝试将我的编程语言的代码库从 Lua 翻译成 C++。我刚开始。我不是 C++ 专家,我希望我能在编写它的同时了解更多,但我已经遇到了一个让我停下来的障碍。
我现在正在编写词法分析器模块。它应该返回一个标记的双向链表,但是当然,在分析源代码时可能会发生错误,例如当多行注释或字符串没有结束括号等时。
当然,当我遇到错误时,我可以打印消息并结束程序。但是由于我想让这些错误易于处理,我能想到的最简单的事情就是return这些错误,这样如果错误处理函数得到那个错误,它就可以处理它,但是如果它一直到解释器,它的消息就会被打印出来。
在 Lua 中,这很容易。如果词法分析器函数在传递的文本中没有遇到错误,我可以让一个函数返回一个标记的双向链表(我在那里使用了无大小的数组,但这并不重要),或者一个要由调用者处理的错误对象。
但是,由于 C++ 必须指定返回类型,如果需要,我怎样才能让函数返回错误对象,以便正确处理它?还是我应该改变方法并使用退货系统以外的其他方式?
不幸的是,我无法搜索 Python 等语言的庞大代码库来了解它们如何处理这种情况,因此即使是指向这些文件的链接也会有所帮助。
【问题讨论】:
-
继承 - 基类
Error携带消息和位置 - 控制台/日志记录部分应该对此感到满意。从Error派生您的特定类以携带您的“恢复代码”完成其工作所需的信息。啊,并将这些错误返回为std::shared_ptr。对于令牌列表的实际返回,在函数参数(指针/引用)中返回它们
标签: c++ return return-type