2010-03-26 58 views
5

有些掙扎,我設法得到提高智能指針在警告級別4推動智能指針和BOOST_NO_MEMBER_TEMPLATES

我發現最小電阻的方式來擺脫編譯錯誤和警告的建立爲Windows CE /移動後

#define BOOST_NO_MEMBER_TEMPLATES 

這實際上是什麼意思?我把自己的靈魂賣給了魔鬼嗎?當我真的使用的類型時,會全部地獄破散嗎?

回答

4

本身不應該有任何不良影響,只是喪失功能。

成員模板是一個成員函數是一個模板,例如:

struct foo 
{ 
    template <typename T> 
    void i_am_not_supported_sometimes(void); 
}; 

所以你沒有得到未定義的行爲或任何東西,你就不能在最通用的方式進行編程的東西。我認爲一個明確的「這個不好的」答案取決於它的用途和解決方法。

看着smart_ptr,例如,無成員模板版本真的只是取出成員模板,如:

template<class Y> 
explicit shared_ptr(Y * p): px(p), pn(p) // Y must be complete 
{ 
    boost::detail::sp_enable_shared_from_this(this, p, p); 
} 

,並取代YT,使你失去的能力,目前一些自動轉換。