sfinae

    4熱度

    3回答

    重構遺留代碼我想合併彼此相關的單獨模板類/結構(以避免命名空間污染)。 Nested(下圖)爲MyStruct一個輔助類,這是我想要移動到MyStruct。 但我不能做這項工作: #include <type_traits> #include <iostream> struct YES {} ; struct NO {}; template <typename TYPE> struc

    5熱度

    1回答

    我正在實現一些非常類似於std::vector的東西,但在堆棧上使用數組而不是內存分配。 d-tor調用一個使用SFINAE的函數。 如果value_type是POD功能有空體。 如果value_type是普通類std::string,則該函數具有正文並正確銷燬所有數據。 現在,我希望能夠使用這個新的std::vector作爲constexpr。然而即使C-tor被宣佈爲constexpr,代碼也

    3熱度

    2回答

    我想圍繞SFINAE包裹我的頭。 我們正在使用它來檢查一個班級是否有一種名爲「乘客」的方法。 通過一些在線示例,我們構建了以下模板類。 #ifndef TYPECHECK #define TYPECHECK #include "../Engine/carriage.h" namespace TSS{ template<typename T> class has_passengers

    7熱度

    2回答

    我的愛好庫的基本組件必須與C++ 98和C++ 11編譯器配合使用。爲了學習和享受我自己,我創建了幾種類型支持功能(如enable_if,conditional,is_same,is_integral等)的C++ 98實現,以便在沒有C++ 11支持時使用它們。 但是,當我實施is_constructible我卡住了。有什麼樣的模板魔法(某種SFINAE),我可以在沒有C++ 11支持的情況下實現

    1熱度

    1回答

    如何在庫用戶對模板類的模板參數使用錯誤的類型時實現錯誤消息? TEST.CPP(從here適應) #include <type_traits> template <typename T, typename Enable = void> class foo; // Sorry, foo<T> for non-integral type T has not been implemented.

    1熱度

    1回答

    如何在不使用任意typedefs的情況下獲得此效果? #include <type_traits> #include <iostream> typedef int Primary; typedef float Secondary; template<Class C, std::enable_if<std::is_same<Class, Primary>::value || std::i

    5熱度

    4回答

    cppreference.com(http://en.cppreference.com/w/cpp/types/enable_if#Notes)指出: 一個常見的錯誤是隻聲明在其默認模板參數的不同的兩個函數模板。這是非法的,因爲默認模板參數不是函數模板簽名的一部分,並且聲明具有相同簽名的兩個不同函數模板是非法的。 struct T { enum { int_t,float_t } m_t

    1熱度

    1回答

    這個問題真的沒有背景。 使用SFINAE(直接或間接使用type_traits)檢查現有函數,成員函數等等的方法有很多。但是: 第一個問題:有什麼辦法來檢查一個類是否實現了一個特定的用戶定義的轉換運算符? 爲了說明我的意思,請考慮這段代碼。我想沒有任何斷言失敗運行這段代碼: #include <type_traits> #include <cassert> struct NotADouble

    5熱度

    3回答

    考慮下面的代碼: auto f() -> decltype(auto) { /* do whatever you want here */ } int main() { f(); } 返回類型推導並decltype(auto)用作後返回類型。 下面的代碼是一個稍微修改的(實際上,sfinae'd)版本: struct S { static void f() {} }; struct T {

    0熱度

    1回答

    我有一些方法,比如說,foo一個模板類。我想爲所有POD類型的此方法指定一個默認行爲,併爲其他類型引入單獨的特化。 (真正的問題更復雜,但是這是一個MWE。)我試圖用SFINAE以通常的方式做到這一點。 template<typename T> class C { public: void foo(T t); }; template<typename T> typename