gpt4 book ai didi

c++ - c++ 中深层嵌套函数的单个 catch all 语句?

转载 作者:行者123 更新时间:2023-11-28 01:35:29 25 4
gpt4 key购买 nike

#include<bits/stdc++.h>
using namespace std;
void subtract(int a,int b){
try{
if(b==1)
throw "Subtracting by 1 results in previous number";
cout<<a-b<<endl;
}
catch(const char *e){
cerr<<e<<endl;
}
};
void add(int a,int b){
try{
if(b==1)
throw "Adding with 1 results in next number";
}
catch(const char *e){
cerr<<e<<endl;
subtract(a+b,b);
}
};
void multiply(int a,int b){
try{
if(b==1)
throw "Multiplying with 1 has no effect!";
}
catch(const char *e){
cerr<<e<<endl;
add(a*b,b);
}
};
void divide(int a,int b){
try{
if(b==1)
throw "Dividing with one has no effect!";
}
catch(const char *e){
cerr<<e<<endl;
multiply(a/b,b);
}
};
void bodmas(int a,int b){
divide(a,b);
};
int main(){
int a,b;
cin>>a>>b;
bodmas(a,b);
return 0;
}

所以我试图通过编写一个小程序来理解深度嵌套函数的概念以及异常处理。但是在这个函数中,我必须为每个函数单独键入 catch 语句。有没有什么办法可以在 main() 中为所有这些函数编写一个通用的 catch all?我在想,假设每个函数返回不同的数据类型,并相应地打印一条语句。

最佳答案

I am thinking suppose each function returns a different data type

如果您的意思是“会抛出不同的数据类型”,那么您可以考虑一个模板函数来完成打印工作。

template<typename T>
void printException(T exept) {
std::cerr << exept << std::endl;
}

为了实现更好的效果(因为可能会错误地传递一些 std::cerr 由于多种原因而无法打印的东西),您可以简单地使用 std::exception 并在构造异常对象时向它传递一条消息,这样当您捕获它你可以简单地做:

void printException(const std::exception& e)  {
// print some information message if needed then...
std::cerr << e.what() << std::endl;
}

Is there any way to write a common catch all for all these functions may be in main()?

是的,您只需删除每个函数中的所有 catch 语句,并在包含所有“风险方法”的 try block 之后将一个放在 main 中——并不是说它们有风险,而是它们可以抛出一个异常。这是一个例子:

int main(int argc, char** argv) {
try {
riskyMethod1();
riskyMethod2();
riskyMethod3();
}
catch (const std::exception& e) {
printException(e);
}
return 0;
}

为了实现这一点,我再次建议放弃抛出字符串,以便于异常对象。您可以使用 dividing_with_one_exeption、multiplying_with_one_exception 仅举几例(这是一个建议,因为您可以轻松地使用 std::exception,给它您的异常消息)。

关于c++ - c++ 中深层嵌套函数的单个 catch all 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49461668/

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