gpt4 book ai didi

c++ - 如何在类成员函数中添加错误检查?

转载 作者:行者123 更新时间:2023-12-02 09:49:24 36 4
gpt4 key购买 nike

给定一个类及其成员函数之一,如下所示:

// constructor
class Stitcher::Stitcher(const std::vector<cv::Mat> imgs)
{
calibrate(imgs);
}

// one of its member functions that gets called upon construction
void Stitcher::calibrate(const std::vector<cv::Mat> imgs)
{
// Do some stuff here
}

构造此 Stitcher对象时,它将在构造时运行 calibrate函数。但是 calibrate有时会失败,我需要一种处理此类失败的方法。我当时想返回一个 bool(boolean) 值,但是不确定如何执行此操作,因为我仍然需要其他成员函数访问 Stitcher对象。基本上,我现在是这样实例化它的: Stitcher stitcher(images);,只要它不会失败,它就可以正常工作。然后,我可以使用 stitcher.stitch()stitcher.otherFunction()等。对于此C++新手如何处理类成员函数内的错误,有何建议?

最佳答案

您可以做的是引发异常,以指示程序执行期间发生的问题。标准库中有许多exception classes,可用于引发异常,所有这些都源自std:exception。例如,std::out_of_range

要抛出标准异常,请创建一个描述异常的字符串,然后使用它来初始化异常对象:

std::string s("my exception")
...
throw std::out_of_range(s);

您还可以编写:
throw std::out_of_range("out of from somewhere");

使用从 char*std::string的隐式转换。

另一种可能性是定义自己的特殊异常类,该类直接或间接从 std::exception派生。但是,您必须在类中提供重写的虚函数 what():
class MyException: public std::exception
{
public:
MyException(...){
}

virtual const char* what() const throw() {
return "C++ Exception";
}
};

提供 what()函数的另一种方法是从具有 what()参数的字符串构造函数的类之一派生异常类:
class MyException: public std::out_of_range
{
public:
MyException(const std::string &what): std::out_of_range(what) {}
};

这样,您可以针对不同类型的异常使用不同的类。

现在您可以在 Stitcher::calibrate()中引发异常,但是您必须具有try ... catch块才能捕获它。像这样:
try
{
Stitcher stitcher;
// this will be executed if no exception is thrown
}
catch (const std::exception &e)
{
std::cout << e.what();
}

关于c++ - 如何在类成员函数中添加错误检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61625786/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com