1樓:dodoleon
直接用c++11的 std::is_base_of 就可以判斷是否是通過乙個基類繼承下來的。
2樓:Certain Y
template
size_t m>constexpr auto string_equal (const char(& value)[n ],const char(& o)[m]) for( inti=0 ;i ++i)} return true;} constexpr auto find (const auto&) constexpr auto find (const auto&t ,const auto&f ,const auto &...r) return find(t ,r...); }consteval auto new_finder (const auto &... css);} #define register_class(X) # Xclass factory else}}; intmain ()編譯期最遠就到 is_db 了,除非把函式都改成 consteval;。因為字串放在引數列表裡不是常量("123" 和 "abc" 都是 const char[4]),所以不能分別例項化這兩個字串的過載,除非把他們寫在模板引數列表裡(會有很多逗號)。 3樓:XZiar 其實你是想要乙個傳入str,返回對應型別是否繼承於T的編譯期函式。 struct T{}; structA: public T{}; struct B{}; template T>struct Wrap ;template F>constexpr bool Check (std ::string_view str, Ffunc )constexpr bool CheckT (std ::string_view str));} intmain ()真正的難點在於……你的「註冊」行為很大概率沒法在編譯期完成,不手寫或者巨集寫if else的話,沒法在編譯期完成str->型別的重建…… 而且想要編譯期檢查的話,你的str也得是編譯期可知的——那這和用enum其實也差不了多少了、 4樓:winston 你可以在傳參時,形參定義成const DBObject* 這樣就可以很大程度上保證傳進來的是資料庫物件,如果想再嚴謹一點,可以在基類實現乙個方法,string getClassType(),在函式體裡呼叫這個方法,將獲取到的字串比對一下即可。 拋磚引玉,看看有沒有人有更好的方法,相互學習~ 5樓:hgjazhgj 如果傳入的const char *在編譯器都可確定,試試在isDbObject宣告中加上consteval,強制編譯器優化為編譯時計算 當然更好的方式是放棄用字串代表型別的做法,使用模板元程式設計 霧雨口口子 include include using namespace std define GEN MEMBER FUNC CHECK CLASS func return type,func name,struct HasMemberFuncInspector func return type... saiyan 說句實話,如果只有乙個月,用C 做乙個資料處理的程式,然後刷LeetCode去吧。起碼可以掌握C 裡面常用的資料結構和語法了。 弓長禾口王 先看書,不要仔細看,大致了解,不拘細節即可,然後刷題,刷演算法題,自己敲!邊刷邊看,這時候就要注重細節的學習了。然後沒事的時候多關注C 類的部落格... WadhgnBf432we3zz 我們學校有個qq表白牆,表白一般發在qq空間,加的人大概有四五百還是六七百,差不多是這個數吧。曾經有段時間,有乙個人被表白刷屏好幾天,吸引了一大波注意。如果你想的話,可以自創個表白牆推廣得夠好的時候瘋狂表白自己,哈哈 蘇嘉陌丶 其實我覺得在大學裡不出名是最好的,因為...C 如何在編譯期檢測乙個類是否有成員函式?
如何在乙個月內提高 C 水平?
如何在乙個大學裡出名?