typetraits

    1熱度

    1回答

    我正在爲舊程序添加新內容,他們在任何地方都使用元編程。我仍然在c + + 03和提高。 因此,這裏是一個問題: 我做模板的功能,我不希望因爲在四個功能唯一的區別專門調用來獲得特定的值: template < typename Message > void function(const Message & message) { .... int value = getHelp

    1熱度

    1回答

    我有一個函數模板,我想限制它可以實例化的類型的集合。 我寫了這樣的事情: template <typename T> void DoSomething(/* ... Some parameters involving T ... */) { // Check at compile-time that T is allowed static_assert( std:

    2熱度

    1回答

    有沒有一種方法可以獲得所有導入的模塊或其他方式?據我所見,「allMembers」不會包含導入的成員。 我想實現的是從導入的模塊中導入所有成員,但它看起來並不像我想象的那麼容易。如果我指定了導入的完整模塊,我可以很容易地獲得我想要的成員,但是如果我使用當前模塊本身,則不會。 所以我的問題是,有沒有辦法在D中獲取所有導入模塊的名稱,因爲這樣我就可以創建一個在模塊上使用「allMembers」的動態方

    1熱度

    3回答

    爲什麼編譯器可以推斷T搭配驗證碼: #include <vector> template<typename T> void foo(T& t) {} int main(void) { std::vector<uint8_t> vec = { 1,2,3 }; foo(vec); return 0; } 但沒有與此代碼: #include <vector

    3熱度

    2回答

    如何檢查C++ 11中的類型是否相等? std::uint32_t == unsigned; //#1 而另一片斷 template<typename T> struct A{ string s = T==unsigned ? "unsigned" : "other"; }

    1熱度

    1回答

    我有下面的代碼,我用實施Tag Dispatching: template <class T> struct tag { typedef struct {} type; static const type value; }; 然後我用這個結構在幾個定義提供的功能重載版本是,由於某種原因,可能會含糊不清。例如,我有一組unarchive函數,它們採用單個參數unarchi

    3熱度

    2回答

    是否有檢測的一類是正常類型,或者是模板類型(元類型)其可包括非類型參數任何方式?我想出了這個解決方案: #include <iostream> template <template<class...> class> constexpr bool is_template() { return true; } template <class> constexpr bool i

    3熱度

    3回答

    考慮這個例子: #include <iostream> #include <type_traits> template <class, class = void> struct is_defined : std::false_type { }; template <class T> struct is_defined<T, std::enable_if_t<std::is

    2熱度

    1回答

    我很想在這裏,但我想要對這個問題進行精確的描述。我想單獨通過他們的名字改進檢測成員模板的實現,但是我遇到了一個障礙。我無法找到任何方法來檢測超載的static /非static成員函數。這個問題非常重要的部分是,我不能使用this trick,因爲它檢測到任何名稱(我已經在當前實現中使用它,有點用處),並且我不能指定類型,因爲它忽略了點單獨使用名字。 僅供參考,請參閱我的other questio

    0熱度

    1回答

    (例如得到std::list<some_value_type>std::list) 考慮下面的代碼: #include <list> #include <string> std::string combine(int val, std::string str) { return std::to_string(val) + str; } template <class T,