sfinae

    3熱度

    1回答

    我一直在通過SFINAE和Curiously Recurring模板模式成語實現總排序,現在已經有一段時間了。總的想法如下: 定義用於檢查關係運算符模板(<,>等) 定義限定總體排序操作符基類。 定義運算符檢測的基類。 從基類繼承。 爲簡單起見,本例中我忽略了==和!=運算符。 關係運算符檢測 我第一次定義類靜態檢查類是否定義了特定的功能。例如,在此我檢測到存在小於運算符或operator<。 t

    1熱度

    1回答

    我想寫我的vec類。爲了提高效率,我使用移動語義。 Vec<int> v1; Vec<int> v2; Vec<int> v3; Vec<int> v4; v4 = v1 + v2; // Line 1 v4 = v1 + v2 + v3; // Line 2 v4 = v1 + (v2 + v3); // Line 3 但是,爲了讓上面的每一行只調用一次拷貝構造

    0熱度

    1回答

    我想創建一個模板類,它將實現一個不同的簽名回調,取決於它是否實例化一種或兩種。 struct NoIntermediate { }; template<typename R, typename I> struct ParserCallbackSwitch { using type = std::function<bool(const std::string &, R&, I&

    2熱度

    2回答

    我有以下代碼: template <typename T> struct function_traits { typedef decltype(&T::operator()) test_type; typedef std::true_type res_type; }; template <typename T> struct function_traits {

    0熱度

    1回答

    這裏是我想要達到的MCVE: #include <limits> #include <iostream> // enable_if (I'm stuck with a c++98 compiler) template<bool B, class T = void> struct enable_if {}; template<class T> struct enable_if<tru

    1熱度

    1回答

    在閱讀了sfinae on member function defined outside of class body(這不是同一個問題)和其他的問題之後,我仍然沒有找到一種很好的方法來定義成員函數的外部類聲明之外,當使用SFINAE方法來啓用只有算術類型的類。 #include <type_traits> template <typename T,typename = typename st

    1熱度

    1回答

    我想檢查該類是否有operator()。 我試了下面的SFINAE。 #include <type_traits> //for std::true_type/false_type #include <utility> //for std::declval template <typename T, typename... A> class has_call_operator { pri

    0熱度

    1回答

    我一直在試圖通過閱讀下面的文章Link瞭解SFINAE的招數,但在理解它的某些部分有困難。 全碼:Link 我感到困惑主要是關於這些代碼行。 // Check if a type has a serialize method. auto hasSerialize = is_valid([](auto&& x) -> decltype(x.serialize()) { }); tem

    2熱度

    1回答

    在問題here之後,我設計了這些運行與給定參數列表兼容的第一個函數的實用程序。但是,它使用g ++編譯(在-std=c++14選項下),但是使用clang失敗。它是一個鏗鏘的bug,它是一個g ++的bug,以及如何使它在兩個編譯器上都能工作。 // Include #include <tuple> #include <utility> #include <iostream> #inclu

    2熱度

    1回答

    我有一個幫助類R<T>,有些類T繼承它。我想爲那些不繼承R<T>的類聲明一些函數f(T t)。這與SFINAE容易實現: template<typename T> class R {}; class Good : public R<Good> {}; class Bad {}; template<typename T> auto f(T /* t */) -> typename st