2014-10-22 71 views
1

我將BOOST移植到我的TI嵌入式平臺中,這種情況在emebeded環境中不受支持並且我的TI嵌入式平臺不支持。所以,我用BOOST_EXCEPTION_DISABLE和BOOST_NO_EXCEPTIONS削減從BOOST例外,因爲通過BOOST CONFIG引導http://www.boost.org/doc/libs/1_56_0/libs/config/doc/html/index.html爲什麼沒有宏可以削減從std :: exception中派生的bad_weak_ptr

但有趣的是,對於bad_weak_ptr,它宣佈從的std ::例外中的源沒有任何的宏:

#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564 
# pragma option push -pc 
#endif 

class bad_weak_ptr: public std::exception 
{ 
public: 

    virtual char const * what() const throw() 
    { 
     return "tr1::bad_weak_ptr"; 
    } 
}; 

#if defined(__BORLANDC__) && __BORLANDC__ <= 0x564 
# pragma option pop 
#endif 

我想問一下,如何從BOOST中減少bad_weak_ptr?爲什麼在異常本身已被切斷的情況下,爲什麼BOOST不給宏來切斷異常依賴類?

+0

請不要在標題中加入像[[BOOST]]這樣的東西 - 這就是我們有標籤的原因。這不是一個論壇。 – 2014-10-22 03:51:44

+0

好吧,我不知道C++知道答案,但是......你可以有一個異常對象,但實際上不能拋出它嗎? – 2014-10-22 03:57:59

+1

不能提交功能請求嗎?如果沒有拋出異常,應該沒有問題只是評論/ ifdef這個聲明 – sehe 2014-10-22 10:33:20

回答

0

有一些骯髒的技巧來解決這個問題,如果你必須的話。如果您在適當命名的頭文件中創建自己的std :: exception類並將其放在包含路徑中,則編譯器應該選擇它。但只是意識到這應該是有據可查的,因爲它是一個黑客。

從更廣泛的意義上講,我想也許你應該考慮爲什麼你首先使用Boost。 Boost具有更大的佔位面積,不適用於小型系統。 BOOST_NO_EXCEPTIONS解決方案與正確的錯誤傳播和處理相距甚遠。在我看來,更好的選擇是採取提升措施 - 例外和全部,或者使用其他更合適的方法。

+0

嗨,我懷疑創建我自己的std ::異常可能會導致更改派生類的屬性,因爲派生類可能會使用某些東西(類型,操作,例如)在基類std :: exception中。我想使用BOOST,因爲它有一些是C++ 11源代碼庫,它的傳播範圍更廣,應該有更穩定的性能優勢,並且它集成了許多有用的C++ 11功能,所以我不需要在其他地方移植一個功能某個地方並移植其他功能。 – 2014-10-22 04:55:13

+0

技術上在'std'命名空間中定義自己的類型會違反標準並導致[Undefined Behavior](http://en.wikipedia.org/wiki/Undefined_behavior)。在這種情況下,我們並沒有真正談論完整的標準庫(我認爲「獨立」編譯器的一致性要求有所降低,儘管我對此不太瞭解) – sehe 2014-10-22 10:32:48

+0

@sehe同意。這在這裏的標準之外運行並且依賴於編譯器實現。 – coderkevin 2014-10-22 15:51:47

相關問題