<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[design frage enums flags und co]]></title><description><![CDATA[<p>hallo leute</p>
<p>als beispiel will ich einen wrapper um FindFirstFileEx und FindNextFile bauen.</p>
<p>FindFirstFileEx hat unter anderem folgende parameter:</p>
<pre><code>typedef enum _FINDEX_INFO_LEVELS { 
  FindExInfoStandard,
  FindExInfoBasic,
  FindExInfoMaxInfoLevel
} FINDEX_INFO_LEVELS;

typedef enum _FINDEX_SEARCH_OPS { 
  FindExSearchNameMatch,
  FindExSearchLimitToDirectories,
  FindExSearchLimitToDevices
} FINDEX_SEARCH_OPS;

DWORD AdditionalFlags; /* #define FIND_FIRST_EX_CASE_SENSITIVE und FIND_FIRST_EX_LARGE_FETCH
</code></pre>
<p>ich will nun fuer die drei parameter eigene enums anlegen.<br />
aber wo macht man das am besten ?</p>
<p>der wrapper heisst schlicht find_first und liegt im namespace 'win'.</p>
<p>legt man die enums frei in den win-namespace ? oder in die find_file klasse ?<br />
oder doch besser drei weitere klassen bauen wo die entsprechenden enums drinnen sind ?</p>
<pre><code>/* beispiel */
class info_levels
{
   public:
      enum
      {
         info_standard,
         info_basic,
         max_info_level
      };

      DWORD flags;
};
</code></pre>
<p>dann ist wiederrum der klasssennamen eher schlecht als recht. da fehlt dann der bezug zu find_file. also dann als nested class von find_file ? oder wieder ein neuer namespace ?<br />
artet dann bei der benutzung in viel schreibarbeit aus.</p>
<p>wie macht ihr sowas ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321462/design-frage-enums-flags-und-co</link><generator>RSS for Node</generator><lastBuildDate>Tue, 21 Jul 2026 00:05:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321462.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 12 Nov 2013 10:04:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to design frage enums flags und co on Tue, 12 Nov 2013 10:04:09 GMT]]></title><description><![CDATA[<p>hallo leute</p>
<p>als beispiel will ich einen wrapper um FindFirstFileEx und FindNextFile bauen.</p>
<p>FindFirstFileEx hat unter anderem folgende parameter:</p>
<pre><code>typedef enum _FINDEX_INFO_LEVELS { 
  FindExInfoStandard,
  FindExInfoBasic,
  FindExInfoMaxInfoLevel
} FINDEX_INFO_LEVELS;

typedef enum _FINDEX_SEARCH_OPS { 
  FindExSearchNameMatch,
  FindExSearchLimitToDirectories,
  FindExSearchLimitToDevices
} FINDEX_SEARCH_OPS;

DWORD AdditionalFlags; /* #define FIND_FIRST_EX_CASE_SENSITIVE und FIND_FIRST_EX_LARGE_FETCH
</code></pre>
<p>ich will nun fuer die drei parameter eigene enums anlegen.<br />
aber wo macht man das am besten ?</p>
<p>der wrapper heisst schlicht find_first und liegt im namespace 'win'.</p>
<p>legt man die enums frei in den win-namespace ? oder in die find_file klasse ?<br />
oder doch besser drei weitere klassen bauen wo die entsprechenden enums drinnen sind ?</p>
<pre><code>/* beispiel */
class info_levels
{
   public:
      enum
      {
         info_standard,
         info_basic,
         max_info_level
      };

      DWORD flags;
};
</code></pre>
<p>dann ist wiederrum der klasssennamen eher schlecht als recht. da fehlt dann der bezug zu find_file. also dann als nested class von find_file ? oder wieder ein neuer namespace ?<br />
artet dann bei der benutzung in viel schreibarbeit aus.</p>
<p>wie macht ihr sowas ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365079</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Tue, 12 Nov 2013 10:04:09 GMT</pubDate></item><item><title><![CDATA[Reply to design frage enums flags und co on Tue, 12 Nov 2013 10:20:49 GMT]]></title><description><![CDATA[<p>entweder in die find_file klasse oder aber in einen eigenen find_file-artigen namespace (zB find_file_types, find_file_levels, etc.)</p>
<p>Sofern diese enums nur für die find_file Klasse da sind, würde ich sie in die Klasse packen, wenn sie auch woanders verwendet werden können, dann ein eigener namespace.</p>
<p>PS:<br />
das ist mein Ansatz für das Problem - prinzipiell ist aber alles eine tragbare Lösung, sofern du konsistent bleibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365080</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 12 Nov 2013 10:20:49 GMT</pubDate></item><item><title><![CDATA[Reply to design frage enums flags und co on Tue, 12 Nov 2013 15:23:40 GMT]]></title><description><![CDATA[<p>In C++11 gibts enum class, da muss u.a. der Zugriff zwingend via enumname::value erfolgen, man spart sich also den Namespace.<br />
Ich würd enum class nehmen und das außerhalb der Klasse machen. Oder, wenn enumname auch unter anderen Umständen verwendet wird, in die dazugehörige Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365147</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 12 Nov 2013 15:23:40 GMT</pubDate></item><item><title><![CDATA[Reply to design frage enums flags und co on Tue, 12 Nov 2013 20:05:09 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>In C++11 gibts enum class, da muss u.a. der Zugriff zwingend via enumname::value erfolgen, man spart sich also den Namespace.<br />
Ich würd enum class nehmen und das außerhalb der Klasse machen.</p>
</blockquote>
<p>das problem ist das ich einem enum class nur einen wert zuweisen kann und nicht mehrere logisch-verknuepfte, was bei flags oft der fall ist.<br />
z.b. bei den AdditionalFlags:</p>
<pre><code>enum class add_flags
{
   case_sensitive = FIND_FIRST_EX_CASE_SENSITIVE,
   large_fetch    = FIND_FIRST_EX_LARGE_FETCH
};

add_flags flags = add_flags::case_sensitive &amp; add_flags::large_fetch; /* geht nicht */
</code></pre>
<p>man koenne nicht mal large_fetch einer int-variablen zuweisen (meines wissens)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365213</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Tue, 12 Nov 2013 20:05:09 GMT</pubDate></item><item><title><![CDATA[Reply to design frage enums flags und co on Tue, 12 Nov 2013 20:08:43 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<pre><code>add_flags flags = add_flags::case_sensitive &amp; add_flags::large_fetch; /* geht nicht */
</code></pre>
</blockquote>
<p>Du willst |, nicht &amp;. Und wer das will muss halt operator| überladen.</p>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>man koenne nicht mal large_fetch einer int-variablen zuweisen (meines wissens)</p>
</blockquote>
<p>Das ist praktisch immer ein Fehler. Wer's doch will: static_cast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365215</guid><dc:creator><![CDATA[bestfehlerbeschreibungevr]]></dc:creator><pubDate>Tue, 12 Nov 2013 20:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to design frage enums flags und co on Tue, 12 Nov 2013 20:55:05 GMT]]></title><description><![CDATA[<p>bestfehlerbeschreibungevr schrieb:</p>
<blockquote>
<p>Meep Meep schrieb:</p>
<blockquote>
<pre><code>add_flags flags = add_flags::case_sensitive &amp; add_flags::large_fetch; /* geht nicht */
</code></pre>
</blockquote>
<p>Du willst |, nicht &amp;.</p>
</blockquote>
<p>da haette ich drauf wetten koennen das da sofort einer drauf anspringt: ich schrieb nur was von ein logischen verknuepfung, also passt &amp; genauso</p>
<p>bestfehlerbeschreibungevr schrieb:</p>
<blockquote>
<p>Meep Meep schrieb:</p>
<blockquote>
<p>man koenne nicht mal large_fetch einer int-variablen zuweisen (meines wissens)</p>
</blockquote>
<p>Das ist praktisch immer ein Fehler.</p>
</blockquote>
<p>warum ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2365229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2365229</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Tue, 12 Nov 2013 20:55:05 GMT</pubDate></item></channel></rss>