1樓:Belleve
給你放乙個久負盛名的 gist 好了:https://
""如果你想對實現執行時的型別檢查,就實現掉 DecEq Format,乙個例子是這樣的
implementation DecEq
Format
where
......
-- 太長懶得寫
------ 使用
case decEq (formatString userInputPattern)
(FString
FEnd)of
Yes really =>
rewrite sym really in
-- 你現在知道了,userInputPattern 的模式確實是 FString FEnd
-- 那麼 printf 的型別就是 string -> string
printf userInputPattern s -- 用 rewrite 替換掉
No whynot =>
......
-- 報錯
在 Idris 裡面實現動態型別基本都是這個套路:實現乙個表示型別的 data,接下來就可以寫出 dependently-typed 的函式來「按圖索驥」了——其實也只是把其他動態型別語言中用到的細節手工寫出來罷了。
2樓:
C++ 17只要用自定義literal,把字串literal搞到型別裡去就可以了,這有什麼難的?
#include
template
...> struct LIST {};template ,typename >struct CONS ;template typename ...U >struct CONS >>;template typename U>using CONS_T =typename CONS TYPE ;template ...> struct FMT_ARG ;template ...chars >using FMT_ARG_T =typename FMT_ARG ...>:: TYPE ;template <>struct FMT_ARG <>;#define FMT(t template struct FMT_ARG<__VA_ARGS__, chars...> using TYPE = CONS_T> FMT( const char*, '%', 's'); FMT( unsigned char ,'%' ,'c' );FMT (void*, '%', 'p'); FMT( double ,'%' ,'f' );FMT (char ,'%' ,'h' ,'h' ,'d' );FMT (short ,'%' ,'h' ,'d' );FMT (int ,'%' ,'d' );FMT (long ,'%' ,'l' ,'d' );FMT (long long ,'%' ,'l' ,'l' ,'d' );FMT (unsigned char ,'%' ,'h' ,'h' ,'u' );FMT (unsigned short ,'%' ,'h' ,'u' );FMT (unsigned int, '%', 'u'); FMT( unsigned long ,'%' ,'l' ,'u' );FMT (unsigned long long ,'%' ,'l' ,'l' ,'u' );template ...chars >struct FMT_ARG <'%', '%', chars ...> ;template char ...chars >struct FMT_ARG ...> ;template ,typename >struct Formatter ;template typename ...F >struct Formatter >>};template ...chars >struct STRING;}; template T... chars >constexpr Formatter ...> ,FMT_ARG_T ...>> operator ""_fmt(); }int main ()Rust可以用proc_macro啊,但是用了就想直接蹭 libfmt_macros 而不是自己寫parser。 3樓:HOOCCOOH 這樣?#include #include #include #include using namespace std; template ...Ts >struct Fmttemplate ...Us >Fmt( Us... lits): f([=]( ostream&os ,Ts...args )->ostream&) {}string operator ()(Ts ...args )const template ...Us >auto operator <<(Fmt >ri) const}}; }template U>auto operator <<(U x)const;} };Fmt _int ;Fmt >_str ;Fmt <>fmt; intmain() DamonChen 你把執行緒問題看成分布式資料一致性問題來看,只是時間超時是0,資料可以記憶體共享。然後再看陳碩說的,被外部殺了,相當於執行緒的時間超時不是0了,真的超時了,就知道只有乙份資料是很難保證資料的準確了。 一般認為執行緒是不應該可以被cancel,但stop還是可以有的,stop之後還... 涇渭漳淮 強制轉換時怎麼實現的?通常是由單獨的CPU指令實現的,也就是硬體實現的。5立方之後是125,125開立方之後是幾?嚴格的數學上應該是5,但實際上計算機有精度的限制,計算結果會有誤差,計算機計算得到的結果可能是4.9999999999999435452340065849之類的,將這個值直接取... 略懂 略懂 電鋼。費用低 符合你的預算 省空間 不會影響你的生活 不擾民 可以調音量帶耳機 麻煩少 不用調律環境寬鬆 最像鋼琴 大三角鋼琴聲音取樣,多級力度重錘鍵盤 擴充套件性高 便於學習和創作 便攜性高應用場景多 可以帶出去表演滿足下下彈點簡單的東西的小小虛榮心 追求手感選羅蘭,追求音色選山葉,選...
如何實現乙個安全的thread stop的api
C語言中強制型別轉換是如何實現的?
自己彈彈簡單點的買什麼型別的鋼琴?