Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;大型项目的例外情况 我现在正在构建一个C++游戏引擎作为一个学习练习,并且把异常加入到那些性能不太重要的部分。我主要是一名PHP和Ruby开发人员,因此我习惯于使用以下简单语法定期声明新的异常类: class SomeSubSystemException < Exception; end P> C++中有一个简单的语法,或者我会处理异常的C++程序错误吗?目前,我必须为每个异常类执行以下操作,这使我不想定义太多异常: class SubSystemException : public MainException { SubSystemException(std::string& msg) : MainException(msg) {} };_C++_Exception Handling - Fatal编程技术网

C++;大型项目的例外情况 我现在正在构建一个C++游戏引擎作为一个学习练习,并且把异常加入到那些性能不太重要的部分。我主要是一名PHP和Ruby开发人员,因此我习惯于使用以下简单语法定期声明新的异常类: class SomeSubSystemException < Exception; end P> C++中有一个简单的语法,或者我会处理异常的C++程序错误吗?目前,我必须为每个异常类执行以下操作,这使我不想定义太多异常: class SubSystemException : public MainException { SubSystemException(std::string& msg) : MainException(msg) {} };

C++;大型项目的例外情况 我现在正在构建一个C++游戏引擎作为一个学习练习,并且把异常加入到那些性能不太重要的部分。我主要是一名PHP和Ruby开发人员,因此我习惯于使用以下简单语法定期声明新的异常类: class SomeSubSystemException < Exception; end P> C++中有一个简单的语法,或者我会处理异常的C++程序错误吗?目前,我必须为每个异常类执行以下操作,这使我不想定义太多异常: class SubSystemException : public MainException { SubSystemException(std::string& msg) : MainException(msg) {} };,c++,exception-handling,C++,Exception Handling,提前谢谢 定义一个为您执行此操作的宏 #define NEW_EXC(Derived, Base) class Derived : Base {\ Derived(const std::string& msg) : Base(msg) {} NEW_EXC(SubSystemException, MainException); #undef NEW_EXC 完成了 定义一个可为您执行此操作的宏 #define NEW_EXC(Derived, Base) class Derive

提前谢谢

定义一个为您执行此操作的宏

#define NEW_EXC(Derived, Base) class Derived : Base {\
 Derived(const std::string& msg) : Base(msg) {}

NEW_EXC(SubSystemException, MainException);

#undef NEW_EXC
完成了


定义一个可为您执行此操作的宏

#define NEW_EXC(Derived, Base) class Derived : Base {\
 Derived(const std::string& msg) : Base(msg) {}

NEW_EXC(SubSystemException, MainException);

#undef NEW_EXC
完成了


尽管我同意Bo Person的评论,即这不会是您的boilaerplate的主要来源,但这里有另一种解释:

使用

模板
类main异常:公共std::运行时\u错误{
私人:
main异常(std::string const&msg):std::runtime_error(msg){}
公众:
静态main异常创建(std::string const&msg){
返回main异常(msg);
}
};
//用法:
类MyException:public main异常{};
void foo(){
MyException::create(std::string(“Foo”);
}

虽然我同意Bo Person的评论,说这不是你的boilaerplate的主要来源,但这里有另一种方式:

使用

模板
类main异常:公共std::运行时\u错误{
私人:
main异常(std::string const&msg):std::runtime_error(msg){}
公众:
静态main异常创建(std::string const&msg){
返回main异常(msg);
}
};
//用法:
类MyException:public main异常{};
void foo(){
MyException::create(std::string(“Foo”);
}

您可以从
std::exception
派生。我应该澄清一下,在这个示例中,MainException是从std::runtime\u错误派生的,就像SubSystemException是从MainException派生的一样。问题是什么?你必须写两行而不是一行?定义新的异常将不是您工作的主要部分,是吗?尝试避免异常。您可以从
std::exception
派生。我应该澄清一下,在这个示例中,MainException是从std::runtime\u错误派生的,就像SubSystemException是从MainException派生的一样。问题是什么?你必须写两行而不是一行?定义新的异常将不是您工作的主要部分,是吗?尝试避免异常。现在有四行代码,而不是三行代码。太好了!:-)@BoPersson对一个新的例外是的,这不是很有效,但他说他正在定义许多例外……我认为他高估了他必须声明的例外数量。在一个非平凡的游戏引擎中,将有大量代码需要编写。例外情况将不是主要问题。此外,对于宏,他有一半的时间会把分号弄错(这是宏的一部分还是用法)。:-)@BoPersson你是对的,编写异常并不是我最大的问题,但我对样板代码有严重的过敏,我正在努力使我的项目尽可能可读,这样我就可以随意放下它,拿起它:)现在有四行代码,而不是三行代码。太好了!:-)@BoPersson对一个新的例外是的,这不是很有效,但他说他正在定义许多例外……我认为他高估了他必须声明的例外数量。在一个非平凡的游戏引擎中,将有大量代码需要编写。例外情况将不是主要问题。此外,对于宏,他有一半的时间会把分号弄错(这是宏的一部分还是用法)。:-)@BoPersson你说得对,编写异常并不是我最大的问题,但我对样板代码有严重的过敏,我正在努力使我的项目尽可能可读,这样我就可以随意放下它并把它捡起来:)
template<class T>
class MainException : public std::runtime_error{
private:
  MainException(std::string const& msg):std::runtime_error(msg){ }
public:
  static MainException<T> create(std::string const& msg){
    return MainException<T>(msg);
  }
};

//Usage:
class MyException : public MainException<MyException> {};
void foo(){
  MyException::create(std::string("Foo"));
}