{"id":5357,"date":"2025-08-18T00:01:06","date_gmt":"2025-08-17T23:01:06","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=5357"},"modified":"2025-08-18T00:01:06","modified_gmt":"2025-08-17T23:01:06","slug":"avr-2-deducing-this-and-parameter-pack","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=5357","title":{"rendered":"AVR #2 - deducing this and parameter pack"},"content":{"rendered":"<p>AVR, deducing this and parameter packs<\/p>\n<p>Das Register DDRB  ist ein special function register (SFR) mit der Addresse 0x17 und den Port Pins DDB und PB.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nusing DDRB_t = _SFR_t&lt;0x17, DDB_t, PB_t&gt;;\r\n<\/pre>\n<p>Der Type _SFR_t ist implementiert mittels Template Values f\u00fcr die Addresse und Variadic parameter packs f\u00fcr die erlaubten Port Pin Typen. Die Port Pin Typen werden an den Type BitOperationen weiter geleitet.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\ntemplate&lt;uint16_t addr, typename... Allowed&gt;\r\nstruct _SFR_t : BitOperationen&lt;Allowed...&gt;\r\n<\/pre>\n<p>Der Typ BitOperationen nimmt als parameter pack eine menge von typen entgegen f\u00fcr welche die bit operationen erlaubt sind und in jeder member funktion wird der typ der member funktion gegen diese list gechekct<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n    template&lt;typename Self, typename PX_t&gt;\r\n    requires (is_same_v&lt;PX_t, Allowed&gt; || ... )\r\n    void operator|=(this Self&amp;&amp; self, PX_t PX) {\r\n      *self |= PX.value;\r\n    }\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>AVR, deducing this and parameter packs Das Register DDRB ist ein special function register (SFR) mit der Addresse 0x17 und den Port Pins DDB und PB. using DDRB_t = _SFR_t&lt;0x17, DDB_t, PB_t&gt;; Der Type _SFR_t ist implementiert mittels Template Values f\u00fcr die Addresse und Variadic parameter packs f\u00fcr die erlaubten Port Pin Typen. Die Port [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-5357","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/5357","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5357"}],"version-history":[{"count":4,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/5357\/revisions"}],"predecessor-version":[{"id":5361,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/5357\/revisions\/5361"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5357"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5357"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5357"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}