簡體   English   中英

大型項目的C ++異常

[英]C++ exceptions for large project

我目前正在將C ++游戲引擎構建為學習練習,並將異常納入對性能要求不高的部分。 我主要是PHP和Ruby的開發人員,所以我習慣於使用這樣的簡單語法定期聲明新的異常類:

class SomeSubSystemException < Exception; end

要么

class SomeSubSystemException extends Exception {};

有沒有一種簡單的語法可以在C ++中執行此操作,還是我打算針對C ++項目使用錯誤的方式處理異常? 當前,我必須對每個類的異常執行以下操作,這使我不想定義太多異常:

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

提前致謝!

定義一個為您執行此操作的宏。

#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的主要來源,但這里有另一種說法:

使用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"));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM