sfinae

    4熱度

    1回答

    考慮代碼: #include <type_traits> #include <iostream> struct test1 { void Invoke() {}; }; struct test2 { template<typename> void Invoke() {}; }; enum class InvokableKind { NOT_INVO

    8熱度

    1回答

    甲功能的語言連接是其類型的一部分: 7.5.1 [dcl.link]的ISO C++標準: 所有功能類型的默認語言聯動,函數名,變量和名稱是C++語言鏈接。具有不同語言鏈接的兩種功能類型是不同的類型,即使它們在其他方面是相同的。 是否有可能在函數指針的鏈接類型上專門化一個模板,或者反思函數指針的類型以確定它在編譯時的鏈接? 這第一次嘗試似乎不合法的: #include <iostream> #i

    2熱度

    1回答

    我想,當在此跌跌撞撞,解決了原來的問題是選擇parse_impl版本: 如果(U型)解析器提供了一個名爲"skp"場,使用該字段; 如果不是,請使用默認值。 我想出了下面的代碼: // This variant compiles for parsers requiring a skipper: template <typename I, typename U, typename A,

    1熱度

    2回答

    我正在實現一個泛型類,它對於不同類型的組(不僅適用於不同的離散類型)應該有不同的表現。我們的目標是序列化不同類型的對象,通過自定義協議發送它們(但這是更具教育性的任務,而不是實用的東西;我是一個對分佈式計算感興趣的學生)。例如,我需要以不同的方式發送浮動和整數。我也想有一個其他POD類型的默認處理程序。但我需要覆蓋一些我的POD類型的行爲... 我發現SFINAE方法非常有用,併爲整型和浮點類型實

    7熱度

    3回答

    我最近在嘗試使用完美的轉發構造函數實現類層次結構時遇到了問題。 請看下面的例子: struct TestBase { template<typename T> explicit TestBase(T&& t) : s(std::forward<T>(t)) {} // Compiler refers to this line in the error message

    2熱度

    1回答

    我玩弄模板專業化和SFINAE。 至於下面的例子中,事情似乎很容易: template <class T> void Do(T t, typename std::enable_if<std::is_integral<T>::value >::type* = 0) { cout << "is integer" << endl; } templat

    11熱度

    4回答

    我想根據類模板參數來確定調用哪個版本的成員函數。我曾經嘗試這樣做: #include <iostream> #include <type_traits> template<typename T> struct Point { void MyFunction(typename std::enable_if<std::is_same<T, int>::value, T >::typ

    5熱度

    1回答

    我正在使用一些SFINAE功能;目前在必須在Linux和Windows上運行的應用程序的一部分中;編譯器的選擇是Windows應用程序的MSVC(Visual Studio 2010 10.0)和Linux的GCC 4.4.5。 我必須檢查某些給定的對象是否提供了一些函數來執行自定義序列化並調用此函數,或者執行簡單的memcpy和sizeof(Object)而未提供自定義序列化方法。 的問題是,一

    0熱度

    1回答

    今天,我試圖對某個類是否具有嵌套類型reverse_iterator進行類型切換。我對這些論壇的一些工作的解決方案,這是下面的一個發現: template<typename T> struct is_reverse_iterable { using yes = uint8_t; using no = uint16_t; template<typename U>

    26熱度

    3回答

    假設我有這些聲明 template<typename T> class User; template<typename T> class Data; ,並希望實現User<>爲T = Data<some_type>和任何類從Data<some_type>衍生而來,但也允許在其他地方規定的其他專業。 如果我不是已經有了類模板User<>的聲明,我可以簡單地 template<typename