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 に答える