sfinae

    9熱度

    1回答

    我試圖用一個SFINAE bool(不像流行void_trick)來實現: template<typename T, bool = true> struct Resolve { static const bool value = false; }; template<typename T> struct Resolve<T, T::my

    6熱度

    6回答

    我有以下的模板類和類型的(全局)變量: template <typename ClassT> struct ClassTester : public ClassT { typedef ClassT type; }; ClassTester<int> *aaa; // No error here 我希望編譯錯誤,因爲int無法得到,但在Visual C編譯沒有++ 2010 如

    11熱度

    4回答

    我目前正在做一些模板元編程。在我的情況下,我可以處理任何「迭代」類型,即任何類型,其中typedef foo const_iterator以相同的方式存在。我正在嘗試爲此使用新的C++ 11模板元編程,但是我無法找到檢測某種類型是否丟失的方法。 因爲我還需要根據其他特徵打開/關閉其他模板特化,所以我當前使用了一個帶有兩個參數的模板,第二個模板通過std::enable_if生成。這是我目前在做什麼

    6熱度

    2回答

    我想檢查一個模板參數是否爲引用類型或不在C++ 03中。 (我們已經在C++ 11和Boost中有is_reference)。 我使用了SFINAE,並且我們不能有指向參考的指針。 這裏是我的解決方案 #include <iostream> template<typename T> class IsReference { private: typedef char One;

    7熱度

    1回答

    這是我的代碼來檢查類是否有成員函數begin與否: template<typename T> struct has_begin { struct dummy {typedef void const_iterator;}; typedef typename std::conditional< has_iterator<T>::yes, T, dummy>::type TType

    3熱度

    1回答

    有沒有辦法使用替代失敗不是錯誤(SFINAE)的枚舉? template <typename T> struct Traits { } template <> struct Traits<A> { }; template <> struct Traits<B> { enum { iOption = 1 }; }; template

    1熱度

    2回答

    我有一個頭文件,其功能在很大程度上依賴於SFINAE的成功。在目前g++ 4.6它按預期工作。我應該以爲,我的代碼的行爲無縫地以同樣的方式爲所有的編譯器(C++編譯器03)? 我覺得這是一個問題,因爲如果有什麼不同,將不會導致編譯器錯誤,並會默默地改變代碼流。

    7熱度

    5回答

    這只是一個關於樣式的問題:我不喜歡C++的模板元編程方式,它要求您使用返回類型或爲SFINAE中的技巧添加一個額外的僞參數。所以,我想出了這個想法是把SFINAE東西在模板參數定義本身,就像這樣: #include <iostream> #include <boost/type_traits/is_array.hpp> #include <boost/utility/enable_if.hpp

    8熱度

    2回答

    我試圖想出一個黑客來測試std::isnan是否在預處理器中沒有特殊的套管編譯器的情況下定義的,並且提出了以下內容,我期望它能夠正常工作。 #include <cmath> #include <type_traits> namespace detail { using namespace std; struct dummy {}; void isnan(dum

    4熱度

    1回答

    我有一個模板類,我正在使用它來提供一種方法,該方法將使用boost::lexical_cast將其參數std::string轉換爲模板中指定的類型,只有在詞法轉換可行時纔可以。目前要檢查是否有可能,我只是檢查是否爲operator>>定義了相關類型。這是一個人爲的例子,基本上說明了我在做什麼: template <typename ArgType, class Enable = void> My