GCC高達4.5沒有標準C++ 0x類型特徵模板has_nothrow_move_constructor
。我可以在我的包中使用它進行優化,但我不想排除其中一種常見編譯器,也不希望使用像HAVE_STD_HAS_NOTHROW_MOVE_CONSTRUCTOR
這樣的符號來重載配置。是否有可能使用該模板(如果存在),並且如果不存在而不是,則使用任何預定義的配置符號回退到複製?我也不想依賴Boost,因爲我的庫很小,不需要任何其他原因的Boost。在編譯時檢測模板存在
僞代碼,我需要的是這樣的:
template <typename type>
struct has_nothrow_move_constructor_robust
: public integral_constant <bool,
/* if possible */ has_nothrow_move_constructor <type>::value
/* otherwise */ false>
{ };
由於move構造函數只對的C++ 0x無論如何,如果我不介意使用其他的C++ 0x的上述定義的功能,所有可能的。
大多數Boost是在頭文件中實現的,而不是在對象文件中實現的。因此,如果你堅持這些,那麼對於你不使用的東西 - 對於你所使用的大多數東西 - 對於這個問題,你都不會支付大小的懲罰。 – 2010-05-09 15:25:02
更多的是依賴(即使幾乎每個人都使用Boost)。也許我可以撕掉Boost的相關部分,但是因爲我的圖書館總是像3頭... – doublep 2010-05-09 15:42:20
似乎很難檢查一個類型是否存在。但是,如果沒有移動構造函數,C++ 0x通常不會自動回退到複製?或者,如果缺乏部分很重要,難道想象一個複製比移動更安全的課程(如果後者沒有被標記爲不移動)是不是很難? – UncleBens 2010-05-09 20:29:48