sfinae

    6熱度

    2回答

    是否可以使用SFINAE和std::enable_if來禁用模板類的單個成員函數? 目前,我有一個類似的代碼: #include <type_traits> #include <iostream> #include <cassert> #include <string> class Base { public: virtual int f() { return 0; } }

    3熱度

    1回答

    我想確定是否有容器。現在我正在對格式化爲具有類型和分配器的容器進行測試。我的最終目標是學習如何編寫一個容器模板,當它包含自身的層時可以允許直接迭代其最內層元素。例如。如果有一個容器包含3個容器,每個容器包含3個容器,每個容器包含3個元素,我希望能夠遍歷基於循環的一個範圍內的所有27個元素。使用SFINAE來檢查元素是否具有迭代器,區分是直接包含元素的容器還是包含元素容器(或容器的容器容器),這似乎

    0熱度

    1回答

    我已經定義許多對象,併爲它們中的一些,我定義的函數: template <typename Ratio> auto print(const T &t, bool a= true, bool b= true) { std::stringstream ss; // ... do stuff ... return ss.str(); } 其中T是對象爲其中的一個的

    2熱度

    3回答

    enum class enabler{}; template<typename T> class X { template<typename std::enable_if<std::is_class<T>::value,enabler>::type = enabler()> void func(); void func(int a); void fun

    1熱度

    1回答

    更改成員的數目我需要一個模板類,它具有不同的成員,具體取決於調用哪個ctor。 我設法得到一個類,它有不同的成員使用sfinae與一個基類(我幾乎像這樣做了SFINAE on member variable)。 現在我的問題是,我可以實現一個單獨的模板類,它具有不同的成員,具體取決於該類的哪個類被調用? 也許有人可以有一個想法如何實現這一點。 編輯︰我目前使用boost::variant,但問題是

    2熱度

    3回答

    我有興趣設計一個模板接口,其中函數的常量和返回類型本身根據模板參數而改變。我設法爲返回類型做到這一點如下。 template<typename T, bool canChange> struct Changable{}; template<typename T> struct Changable<T,true> { typedef T type; }; template<

    1熱度

    1回答

    通常基於一類使用enable_if當模板類型,有必要複製類的模板類型作爲構造或方法的模板參數: template < typename U = T, typename = typename std::enable_if< !std::is_void<U>::value >::type > Class() { } 當恰好這是必要的(或不) ? 例如,

    2熱度

    2回答

    我想根據模板參數選擇具體類實現的接口。在下面的簡化示例中,有兩個接口使用不同名稱的方法 - Implementation類需要提供方法實現,具體取決於模板參數。 如果我使用IntType - 它應該實現IntInterface(getInt()和setInt(int))。 如果我使用DoubleType - 它應該實現DoubleInterface(getDouble()和setDouble(do

    1熱度

    1回答

    我不知道使用SFINAE方法重載時必須考慮哪些規則。我多次遇到問題,因爲我知道接縫涉及更​​多規則。所以我希望有一套可以簡單解釋的規則來幫助解決一般問題,而不是一次又一次地提出問題。 我的起點在這裏: Specializing class with SFINAE if a parameter pack is needed 代碼1 class AA { public: using TRAIT = i

    2熱度

    2回答

    如何檢查會員功能是否存在,是否不是繼承? 我需要這解決歧義爲以下示例: A型或者具有一個foo()或bar()成員函數。 Caller將call爲給定類型存在的那個。但是,DerivedWithBar繼承自BaseWithFoo的foo(),但定義了它自己的bar()。因此,Caller不知道要調用哪個函數。 我需要一種方法來給予非繼承foo優先於繼承bar(),但我不知道如何檢查一個成員函數是否