From 231d6d6a7f015c97aff48f510a9fc31dd7060c6b Mon Sep 17 00:00:00 2001 From: polymurph Date: Sun, 1 Aug 2021 17:17:49 +0200 Subject: [PATCH] small cleanup --- CPP/CRTP/example/main.cpp | 130 +++++++++++++++++++++++++++++++++++++- CPP/CRTP/example/runtest | Bin 17248 -> 18216 bytes 2 files changed, 127 insertions(+), 3 deletions(-) diff --git a/CPP/CRTP/example/main.cpp b/CPP/CRTP/example/main.cpp index 3039948..4bbbd67 100644 --- a/CPP/CRTP/example/main.cpp +++ b/CPP/CRTP/example/main.cpp @@ -1,14 +1,138 @@ +#include #include +// https://www.modernescpp.com/index.php/c-is-still-lazy -struct Shape +// +// CRTP base class of pin +// + +/* + avoiding virtual call (static polymorphism) +*/ + +template +struct PinBase { - + void set(bool logic) + { + static_cast(this)->setImp(logic); + } + + void toggle() + { + static_cast(this)->toggleImp(); + } + + bool get(void) + { + return static_cast(this)->getImp(); + } + + private: + + // + // base implementations + // + + void setImp() + { + std::cout << "base implementation of set()!" << std::endl; + } + + void toggleImp() + { + std::cout << "base implementation of toggle()!" << std::endl; + } + + bool getImp(void) + { + std::cout << "base implementation of get()!" << std::endl; + return true; + } }; +// +// implementations +// + +struct STM32_Pin : PinBase +{ + STM32_Pin() + { + std::cout << "created STM32_Pin" << std::endl; + } + + void setImp(bool logic) + { + std::cout << "stm32 pin set to " << logic << std::endl; + } + + void toggleImp() + { + std::cout << "toggled stm32 pin" << std::endl; + } + + bool getImp() + { + return true; + } + + + void STM32_stuff() + { + std::cout << "STM_32 specific stuff" << std::endl; + } +}; + +struct AVR_Pin : PinBase +{ + AVR_Pin() + { + std::cout << "created AVR_Pin" << std::endl; + } + + void setImp(bool logic) + { + std::cout << "AVR pin set to " << logic << std::endl; + } + + void toggleImp() + { + std::cout << "toggled AVR pin" << std::endl; + } + + bool getImp() + { + return true; + } + + void avr_stuff() + { + std::cout << "AVR specific stuff" << std::endl; + } +}; + +template +void foo(T& base) +{ + base.set(true); + base.set(false); + base.toggle(); +} int main(void) { - std::cout << "CRTP example" <ix98+!~QPNvBaRp3u zKS-~Elyuok=Ot4Jrp$NhGe{Z9kiQO{(v4y2)+67XY*q3ncU02Ty5FypBPi*15lni| zXuW5&9@A#6$CSHC&7k8&&G*s)@F+1QSxUn{w&RpPX;5h?eOAGODeL_%^r)S`Zeq8O zaDB`8<)CgqQ}REhZK>pVch|O5yfu}~6lPjydb(S?y8`)aphNbX?33)y-Frw}kXyAW z$-hBk#DDmWr#oI)^Od(&Z;l-O(rsV=&fEFz=SX%f4zi*8^(Qh<7^QQG@1!@JSlh2k zOMibK&~-~;aW@QB!_O}xpI!$4`(^OWzzrPUbp0~*-oFe^{xiHrP`+~+oV;AEUqi6J zrHY+vfUg%H69eIoq;?6&c%Q#S^*2WHN6j za$~#tQ`t;nEIOV_C|-5WXLpasJ-=1G4<4ov_6l--Htq8=Y<=S*U%L>tNA?t@q9JCUfDgR=QqYT=s|VbgSTmU zGpO`fp35)m`x9Nee9e;NITx;*A`QIm!rk-O1sBeBkivosN5`CW$%TK!L4{a!;n%uw z9{+T^S?9tx2327V2+c*DjG)R9&bJCeT7vW|1mQd^K9d(uP~1bGd2r0C9E{Q84ElzDT5Z z(cXaWTn!+P?p#y4(6o7u44>5$^7l#k?IT3CUNz5Ltv8F8%rgsjo4%LK^H=Q~VBj@v zps{peLe|6jb31z5V6L!jk9lOr3Bcz6+-=kfFko13WDzx)6;i!Z>?VQJ_kv-sVGp8CJD_%Mp zz6|B3l=6Q-df^|Ga?{h{%SEa9Z;rKXWouunVhx6}%Fvg|(B~YzUw(?ZBaNl1>qV5_ z0n+Pr^qwp0bye5U^n8xqAC~p5Tv@)?@8iV;F1rZng%=?Qmz8_{BL%>Ry=7}( zuVM|oKBEksBts87dcLyWq3U{HQF>FP*YD`Pa=YWLyOf^$l$poEi{GYUK;z>8Q360E zuuB8PoJ3v^9yz#aoVb-^TGmk>aVe*i^3u`L^z@#~WTyD9RL3{eY4J9YSZ`K2V{*Jz zT8Nd0xVx2P;me9O5op@{D4IhPo(SC=DSkJ!H&T2rv?o;jAcPs|mZ=sY_L%dn)1ae6 zTj^46T=>@eIH6}gsJCxw|337Fiti5<-y10YG*r6b4fDuZpV|9^!rL^r-oHQeKxlvH zK*++JAZVr~{mNNa)?WLmd7$Qjng?ngsCl5~ftm+u9;kWXf87H<{k4H!*oBDUBbS|s z8>3^pIyCO&gI+-!@3EQxTUWOiM2j~LmKF~(gHwQ{99Tz}PgHodJ&Xjx)jR@aNv+t(0YZ{OH)-)4NdmEb3 z2fTkdsk*!nH$#Htr{5`+4wAILdC%4gj!K9C65pfD~?(bKm z`v8tl!&i5Jijcqg@w)zXt8-`&io|~e#|ZfJQs?mNOesM8CvnWJp#LoRCsyFU0siR~ z_*cMxd4>8n;T*lUg8pZ~_v2hI*S`nAe++)P7xk3;H{$f~5%3$JFF!r9e`d=5c@q3B zEAXEMKM4MoR{TrXC5BrVzRbhY2A2pc%w#QeS{+=UicKU`U5jk6rYM@|5~&@K9R~Yw*#*!vbDAgYbGdaUm7{@qG>T(vWk)@FPdY>ft?kLB6cmoVlzdjeL#BTsj?f)0OPg|}*Kx9DUeE;Hk9B|e4?*qe!$b$II%D(%zT7M_V zP?d2ziix%kQA+4qMWX%aKHN>bUyiTlNAy-%LT8KqI+*TMeO#&zXJnd=!QH>kd zD|z<+39?fqzU3RhX*>jjN}hk8!1-#1{7i@uMW5C7_i6ibEf%cv8vl1sy%(kZk1c8c zFSPu)_8Z$-Oa8B{QkL3*Q-7cG*pEngzcBQLE7u00ai5kS@r;Lz#=YZ#?yp9bdY_c` zmomO3ale?;^}<~;oz?b_>w0OvIBleD6_ zTy)k-WbE9mn8-!b2`gSmr)Qz!Dp`=UD?};YClH&SmT^Tx?Y+~*FLv(ye0yI>0;Ts9)72uV^v5=sc{ie}=dMKyrRZONptb`IUs7aD>} zVcd#XGE~X321i1>!d7_q0EK~Bh}*NmrUuP{5n&D7w>z{e(hpum=i`-t3?y@ExMy&1 zG>jOoP~T7(Rul249Yq}3J!ot^nXwA_1gX2DsDeQmG^GQj5cJjSd>iXkU&12kX&GAf zVI#?O4LU3fHQa&kZheSbi`=0yPGqx@a&y9mM#f}V zS{dr^P(g1?Eq1H66I*syMUbt~+4gqTZ#mX=e?LT++mg;!#N&Cm7Q+2_0Jz*z?qAr| z4G3s=IbnER6i(;0NvB-J#KDD*PB%PEClXFBgT2v1If&w8ru5TzK3`TWH=;t-8+J%- z@wC8YzhVHXXuVjzAjdPGU+z@3vn#_5R|=5S;f~{;7L;qE8AkS)hg`W^wG)9*U!>KJPU;e- zw7_^FiD2PmTm+~z70pkHKzud>dy3jQ#W|G7}m? zvnV3!62H=ifm~M3C4t10o|mWMFv2CJswQZq!FkjWO($chK5LU@G>+z^00x@~;4YEI z%jl05b1k4TbCHbtR@PS`fEsnRq=%7sYO5XibUrc^!c1uztXxPeKCl1m z1%^i|N1vW&C^6-AD}^c>oF_^*sX^rtE)iKg%(F5c;&{#ARN8U>XFU61AUX zxc!7tdI$$Kne};{f~leV&-JrD_y19?-v>&G*E5*TC|IuZ;jPH2pY@*rMpaPzWa9TS zO-aX{w0j+>h@4yB(0WV{I+7~mF)#kyqd%twm~wyF440Yyg-4&?JD9%fX)xE%_Ws(V z&+9TwdA*V4J?6yUXnj6^!qAeMQv2M=tN%?f$$zYW(ooV&X??(*y!y|9>DK4g8e*_@m5*kc)@ z)7s!U-BGgBg@gOe^9NlY+;(K06zo;m13YnQ4%f?qv@B9h|1a-S5^FpPo}&0~!s=Q1 delta 2314 zcmZWrYfO_@7(VA~OKIiOue2-m)>f7+jL-{E!AqeRgs<2o;3d&bY^y*ZLqUP*)CCl0 ztfm{~)x{W=U9vfTN*XhNxG3A=7R{EJZJF~I8qI2=87%(LE%V!ZzKfdfBk#1kBoRNlbL?gLU$%U=OiFLSgvXG!b_>8$&js`09`?f_L?AWv8sc!b#KK(G4C#dM0EaLVORSsT1ddDs?nVR0an^T6coMs>j1t;iRsF_20WPY!K&4 z9b+u^w+dp2q@?%1!JzUfQ2wRndu~}@D9-grVO9B9AnHZ$5zl5}Jn$i^h>*HBTqK+f zaOj?^7DX}Fi_KM?3*O`%)oK6f64ayv_febs?x`pWsc$f$Ha0=(s*w6EcNxixETvAk z&buluus9zxVcNQ%snY(>SY{`6Dy9*(#?+CN3H9WJ;kM$ceR zJsIdpmSWw8bp%7#G9pxBI>tqc3w9UjnU2{HVLguaDB?3a*DMK`eG2Og+O03z+hu?J z_~a7S^JwqHZLz%^FlaHwA8<^w8S4Psh*OkTPrG`$oiJ1FaFwBw6$Qw$ym1vQR6DpX zGnn1mX)o+?JLo~kxSMDKZnzzMLU}I~AVHv>CQ2aWaTMQWXB^8DQ5+zd87G(uhbFxZ zcmd@SgsAtjuUD&%pQDE8iR%5FWfvPa3|u~|#(*<*_-vR(pRbh;!VLDu;IPlCEhU)j z9iN+8fUhaXYK6v{1GE7?#okXfZT9o(W1vJXLF7mYnFC*~jXEJ(+lpZ`wViA1WKT#I zsk?Js(VkIW0_l4p_m9G>duxS-8i%nI-6%1W&s}h~?iHWBwLDQ@N;xzkckoT)*h`p~ zm=_l6Z1z>s++{?4j8v~SaQSV~PH74oAwiXwaR_-6DJMc6KZSESk#ET355Qr+ji#VO zYqJ~C*Nhv|tt?VHv>5gae35OwhiK)wauUpoP=fEVnPa<;(ih6#%**}>&dXw|zdCqb zrDB2GIPX@e-3R(us3NpJt(4rJL} zOK+l;<%5k>@Zv}%hdiE{vgJg})`N=VHpOaz(5kPY zb@ly8UBlvFur(G9N49K<*ShOSJl-`l5bsUy?&|NJT)PZ5>ijUUb~W5uTVagv7#fNX z4JY>w!}`FhCGq~g9XsPYheqOkyZeUWa$xxjR1b3CY>dH8ttC6rxS3{iO-_mj-4OEd z>a9}oAViT>@05y*Ar=x_^+u)Bd zZx~dL?jX=eJvuZwrvdNekw^=i(wN|8#L25yK*bmsn!UVJ4x3O=pxL(O zMz*5VI*&p9?hP=zu89gjTUZ-vX|ncuWxshPbM|2R;B-rsaZ9~yIjn(eEh~+`ua<{; J3dZ2_{{U59z;6Hm