Bu, bir istisnaya bazı bilgiler eklemek istediğimde sıklıkla yaptığım şeyin bir örneğidir:
std::stringstream errMsg;
errMsg << "Could not load config file '" << configfile << "'";
throw std::exception(errMsg.str().c_str());
Bunu yapmanın daha güzel bir yolu var mı?
std::string
bir sürer örtük bir Oluşturucu sahip const char*
...
std::exception
alt sınıflarının perde arkası uygulamasının bir parçası gibi görünüyor std::runtime_error
ve ve std::logic_error
. Apart standardıyla tanımlanır olanlardan ait MSVS' versiyonu <exception>
da iki inşaatçı, bir alma içerir (const char * const &)
ve diğer alma (const char * const &, int)
. Özel bir değişken ayarlamak için kullanılırlar const char * _Mywhat
; eğer _Mywhat != nullptr
, o zaman what()
varsayılan olarak onu geri döndürür. Ona dayanan kod muhtemelen taşınabilir değildir.
std∷exception
ile birchar*
kurucuya sahip değilsiniz.