sfinae

    3熱度

    2回答

    我一直在解決至少兩週的問題,被我無法理解的東西阻塞,並且在SO中提出的問題並未真正指向真正的問題(愚蠢的我!)。最後,現在,我希望在這個問題上我發現了我最頭疼的一點。 我一直在使用的模板結構作爲輔助檢測一個給定的類型是否有一個成員方法還是不行,這個模板結構是這樣的: template < typename Type, typename Return, typenam

    3熱度

    1回答

    序言: switch(nValue) { case X: ... case Y: ... default: ASSERT_FOR_DEFAULT(nValue); } ASSERT_FOR_DEFAULT是一個宏,將顯示一個(自定義)斷言對話框,報告打「默認情況下, 」。是的,這個宏用於運行時斷言,而不是編譯時斷言。但是,我只需要它,任何常量值(編譯時)都不能傳遞給這個

    7熱度

    1回答

    如果替換失敗涉及模板別名(,例如缺少成員類型名稱上的模板別名,如下面的代碼段中所示),是否應該觸發錯誤? 鏘和gcc似乎對此意見不一: // some types struct bar { }; struct foo { typedef void member_type; }; // template alias template<class T> using memb

    1熱度

    2回答

    我試圖檢查模板參數是否存在默認構造函數。 我想要做這樣的事情: template <typename A> class Blah { Blah() { A* = new A(); } } 但我想通過SFINAE或其他一些技巧在編譯時檢測如果存在構造,提高我自己的static_assert,如果它不。 當我有類(如std::vector)沒有「默認構造函數」,但具有默認參數的構造

    20熱度

    3回答

    這裏就是我想要做的事: template <typename T> struct Model { vector<T> vertices ; #if T has a .normal member void transform(Matrix m) { each vertex in vertices { vertex.po

    2熱度

    1回答

    爲什麼在VS 2010中 typename std::enable_if<!std::has_trivial_destructor<Titem>::value, BOOL>::type Clear() { ... } typename std::enable_if<std::has_trivial_destructor<Titem>::valu

    6熱度

    2回答

    我似乎無法找到使用SFINAE和variadic模板類的好解決方案。 比方說,我有一個可變參數模板對象,不喜歡引用: template<typename... Args> class NoRef { //if any of Args... is a reference, this class will break //for example: std::tuple

    2熱度

    2回答

    不知道標題突出了我的目標。 我可以動態調用在編譯時的方法? 例如: int CallMethod(string methodName, string methodArg) { Foo foo; return foo.#methodName(methodArg); } CallMethod("getValue", "test"); // This would attemp

    23熱度

    5回答

    爲什麼這不與gcc48和clang32編譯? #include <type_traits> template <int N> struct S { template<class T> typename std::enable_if<N==1, int>::type f(T t) {return 1;}; template<class T>

    4熱度

    2回答

    考慮這個結構: struct foo { void dummy() const {} }; 是否可以檢測使用SFINAE這種方法的常量性? 例如,我想捕捉的特質這種特性可能在是可用的一個static_assert: static_assert(is_const_method<decltype(&foo::dummy)>::value, "Not const!"); 我認爲無論是