{"id":3044,"date":"2015-06-23T11:09:05","date_gmt":"2015-06-23T11:09:05","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=3044"},"modified":"2020-02-07T11:05:40","modified_gmt":"2020-02-07T11:05:40","slug":"combiner-les-parametres-flags-dun-enum","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=3044","title":{"rendered":"Combiner des param\u00e8tres (flags) dans une d\u00e9claration enum"},"content":{"rendered":"<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/06\/bits1.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-3049\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/06\/bits1.jpg\" alt=\"bits\" width=\"377\" height=\"212\" srcset=\"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/06\/bits1.jpg 660w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/06\/bits1-300x169.jpg 300w, https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/wp-content\/uploads\/2015\/06\/bits1-624x351.jpg 624w\" sizes=\"(max-width: 377px) 100vw, 377px\" \/><\/a><\/p>\n<p><strong>I<\/strong><strong>ntro :<\/strong><\/p>\n<p>Parfois on a besoin de <strong>combiner<\/strong> et de regrouper des param\u00e8tres d&rsquo;une <em>enum<\/em> ensemble.<\/p>\n<p><strong>Pr\u00e9requis : <\/strong><\/p>\n<p>&#8211; Comprendre l&rsquo;essentiel de la <em>logique bool\u00e9enne<\/em><\/p>\n<p>&#8211; Savoir ce qu&rsquo;est une \u00e9num\u00e9ration en <em>C++<\/em><\/p>\n<p><strong>Explications :<\/strong><\/p>\n<p>Par exemple, pour g\u00e9rer les entr\u00e9es clavier des touches <strong>SHIFT<\/strong>,<strong> CTRL<\/strong>, <strong>ALT<\/strong>, nous devons parfois les combiner afin d&rsquo;effectuer une action sp\u00e9ciale dans une application.<\/p>\n<p>On pourrait d\u00e9clarer ces possibilit\u00e9s par l&rsquo;\u00e9num\u00e9ration de la mani\u00e8re suivante :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nenum KeyModifier\r\n{\r\n\u00a0\u00a0\u00a0 SHIFT,\r\n\u00a0\u00a0\u00a0 CTRL,\r\n\u00a0\u00a0\u00a0 ALT\r\n};\r\n<\/pre>\n<p>Mais on aimerait les combiner avec l\u2019op\u00e9rateur bool\u00e9en : | (le <strong>ou logique<\/strong>) de la fa\u00e7on suivante :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/\/ Cette fonction re\u00e7oit deux champs d'une \u00e9num\u00e9ration combin\u00e9s\r\nKeyInputReceiver(SHIFT | CTRL);\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Cette combinaison repr\u00e9sente le fait que l&rsquo;on <strong>appuie en m\u00eame temps<\/strong> sur la touche <strong>SHIFT<\/strong> et sur la touche <strong>CTRL<\/strong>.<\/p>\n<p>Alors il est n\u00e9cessaire, pour combiner ces derniers champs, de sp\u00e9cifier des valeurs d&rsquo;une certaine fa\u00e7on \u00e0 cette \u00e9num\u00e9ration :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nenum KeyModifier\r\n{\r\n\u00a0\u00a0\u00a0 SHIFT = 0x01,\r\n\u00a0\u00a0\u00a0 CTRL\u00a0 = 0x02,\r\n\u00a0\u00a0\u00a0 ALT\u00a0\u00a0 = 0x03\r\n};\r\n<\/pre>\n<p>Ceci afin de nous permettre de faire des op\u00e9rations binaires (<strong>bitwise<\/strong>) sur ces derniers champs.<\/p>\n<p>Pour simplifier cette derni\u00e8re d\u00e9claration, on utilisera cette macro suivante qui aidera \u00e0 assigner, dans votre d\u00e9claration enum, les diff\u00e9rents champs binaires (bit flag)<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#define BIT(x) 1 &lt;&lt; x\r\n<\/pre>\n<p><span style=\"text-decoration: underline;\"><br \/>\nMais que fait cette derni\u00e8re macro ?<\/span><\/p>\n<p>Elle remplace les champs de d\u00e9clarations binaires de mani\u00e8re simple.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nenum KeyModifier\r\n{\r\n\u00a0\u00a0\u00a0 SHIFT = BIT(1),\r\n\u00a0\u00a0\u00a0 CTRL\u00a0 = BIT(2),\r\n\u00a0\u00a0\u00a0 ALT\u00a0\u00a0 = BIT(3)\r\n};\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>R\u00e9sum\u00e9 :<\/strong><\/p>\n<p>Nous avons appris comment combiner plusieurs param\u00e8tres d&rsquo;une \u00e9num\u00e9ration en C++.<\/p>\n<p><strong>R\u00e9f\u00e9rences :<\/strong><\/p>\n<p>&#8211; http:\/\/www.learncpp.com\/cpp-tutorial\/38-bitwise-operators\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro : Parfois on a besoin de combiner et de regrouper des param\u00e8tres d&rsquo;une enum ensemble. Pr\u00e9requis : &#8211; Comprendre l&rsquo;essentiel de la logique bool\u00e9enne &#8211; Savoir ce qu&rsquo;est une \u00e9num\u00e9ration en C++ Explications : Par exemple, pour g\u00e9rer les entr\u00e9es clavier des touches SHIFT, CTRL, ALT, nous devons parfois les combiner afin d&rsquo;effectuer une [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/3044"}],"collection":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3044"}],"version-history":[{"count":30,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/3044\/revisions"}],"predecessor-version":[{"id":5922,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/3044\/revisions\/5922"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}