2

我目前正在构建一个 C++ 游戏引擎作为学习练习,并将异常合并到对性能不太重要的部分。我主要是一名 PHP 和 Ruby 开发人员,所以我习惯于使用如下简单的语法定期声明新的异常类:

class SomeSubSystemException < Exception; end

或者

class SomeSubSystemException extends Exception {};

是否有在 C++ 中执行此操作的简单语法,或者我是否会以错误的方式处理 C++ 项目的异常?目前我必须为每一类异常做以下事情,这让我不想定义很多:

class SubSystemException : public MainException {
    SubSystemException(std::string& msg) : MainException(msg) {}
};

提前致谢!

4

2 回答 2

3

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

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

NEW_EXC(SubSystemException, MainException);

#undef NEW_EXC

完毕。

当心宏可能是邪恶的。

于 2012-12-08T14:08:08.357 回答
1

尽管我同意 Bo Person 的评论,即这不会是您的样板文件的主要来源,但这里有另一种方式:

使用CRTP

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"));
}
于 2012-12-08T15:24:05.123 回答