<?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[Vardiadisches Makro zum Initialisieren mehrerer Objekte]]></title><description><![CDATA[<p>Hallöchen,<br />
ich habe Folgendes im Sinn:</p>
<pre><code>DECLARE_VALUES(
  0, PETER, &quot;123&quot;,
  1, KARL, &quot;456
);
</code></pre>
<p>um folgendes zu erhalten:</p>
<pre><code>enum class Ids {
  PETER = 0,
  KARL = 1
};

char const* const names[] = {
  &quot;PETER&quot;,
  &quot;KARL&quot;
};

char const* const pattern[] = {
  &quot;123&quot;,
  &quot;456&quot;
};
</code></pre>
<p>Noch besser wäre: Die Ids werden nicht explizit angegeben sondern ab 0 aufsteigend generiert.</p>
<p>Meine Frage ist jetzt: Gibt das der Preprozessor her? Wenn ja, irgendeinen Tipp wie?</p>
<p>Vielen Dank und lg,<br />
Florian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332000/vardiadisches-makro-zum-initialisieren-mehrerer-objekte</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 13:44:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332000.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Apr 2015 13:27:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vardiadisches Makro zum Initialisieren mehrerer Objekte on Thu, 02 Apr 2015 13:27:08 GMT]]></title><description><![CDATA[<p>Hallöchen,<br />
ich habe Folgendes im Sinn:</p>
<pre><code>DECLARE_VALUES(
  0, PETER, &quot;123&quot;,
  1, KARL, &quot;456
);
</code></pre>
<p>um folgendes zu erhalten:</p>
<pre><code>enum class Ids {
  PETER = 0,
  KARL = 1
};

char const* const names[] = {
  &quot;PETER&quot;,
  &quot;KARL&quot;
};

char const* const pattern[] = {
  &quot;123&quot;,
  &quot;456&quot;
};
</code></pre>
<p>Noch besser wäre: Die Ids werden nicht explizit angegeben sondern ab 0 aufsteigend generiert.</p>
<p>Meine Frage ist jetzt: Gibt das der Preprozessor her? Wenn ja, irgendeinen Tipp wie?</p>
<p>Vielen Dank und lg,<br />
Florian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448889</guid><dc:creator><![CDATA[Variadischer Wahnsinn]]></dc:creator><pubDate>Thu, 02 Apr 2015 13:27:08 GMT</pubDate></item><item><title><![CDATA[Reply to Vardiadisches Makro zum Initialisieren mehrerer Objekte on Thu, 02 Apr 2015 13:39:12 GMT]]></title><description><![CDATA[<p>Das kann man mit Boost Preprocessor machen.</p>
<p>Variadischer Wahnsinn schrieb:</p>
<blockquote>
<p>Noch besser wäre: Die Ids werden nicht explizit angegeben sondern ab 0 aufsteigend generiert.</p>
</blockquote>
<p>Das machen <code>enum</code> s sowieso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448892</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Thu, 02 Apr 2015 13:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Vardiadisches Makro zum Initialisieren mehrerer Objekte on Thu, 02 Apr 2015 13:40:12 GMT]]></title><description><![CDATA[<p>Variadischer Wahnsinn schrieb:</p>
<blockquote>
<p>Meine Frage ist jetzt: Gibt das der Preprozessor her? Wenn ja, irgendeinen Tipp wie?</p>
</blockquote>
<pre><code class="language-cpp">#define AS_ENUM(a,b) a,
#define AS_NAME(a,b) #a,
#define AS_PATTERN(a,b) b,

#define VALUES					\
  X(PETER, &quot;123&quot;)				\
  X(KARL, &quot;456&quot;)

#define X AS_ENUM
enum class ids {
  VALUES
};
#undef X

#define X AS_NAME
const char* const names[] {
  VALUES
};
#undef X

#define X AS_PATTERN
const char* const patterns[] {
  VALUES
};
#undef X
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2448893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448893</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Thu, 02 Apr 2015 13:40:12 GMT</pubDate></item><item><title><![CDATA[Reply to Vardiadisches Makro zum Initialisieren mehrerer Objekte on Thu, 02 Apr 2015 14:40:42 GMT]]></title><description><![CDATA[<pre><code>#include &lt;boost/preprocessor/arithmetic/mul.hpp&gt;
#include &lt;boost/preprocessor/arithmetic/div.hpp&gt;
#include &lt;boost/preprocessor/arithmetic/inc.hpp&gt;
#include &lt;boost/preprocessor/repetition/enum.hpp&gt;
#include &lt;boost/preprocessor/tuple/elem.hpp&gt;
#include &lt;boost/preprocessor/tuple/size.hpp&gt;
#include &lt;boost/preprocessor/variadic/to_tuple.hpp&gt;
#include &lt;boost/preprocessor/stringize.hpp&gt;

#define DECLARE_ENUM(z, N, T) \
  BOOST_PP_TUPLE_ELEM(BOOST_PP_MUL(2, N), T) /*= N Hier kann noch erweitert werden*/
#define DECLARE_NAME(z, N, T) \
  BOOST_PP_STRINGIZE(BOOST_PP_TUPLE_ELEM(BOOST_PP_MUL(2, N), T))
#define DECLARE_PATTERN(z, N, T) \
  BOOST_PP_STRINGIZE(BOOST_PP_TUPLE_ELEM(BOOST_PP_INC(BOOST_PP_MUL(2, N)), T))

#define DECLARE_VALUES_(T) \
  enum class IDs          { BOOST_PP_ENUM(BOOST_PP_DIV(BOOST_PP_TUPLE_SIZE(T), 2), DECLARE_ENUM   , T) }; \
  char const *names  [] = { BOOST_PP_ENUM(BOOST_PP_DIV(BOOST_PP_TUPLE_SIZE(T), 2), DECLARE_NAME   , T) }, \
             *pattern[] = { BOOST_PP_ENUM(BOOST_PP_DIV(BOOST_PP_TUPLE_SIZE(T), 2), DECLARE_PATTERN, T) };

#define DECLARE_VALUES(...) DECLARE_VALUES_(BOOST_PP_VARIADIC_TO_TUPLE(__VA_ARGS__))

DECLARE_VALUES(Peter  , 123,
               Karl   , 456,
               Volkard, Tuntenfriseurstammkunde)

#include &lt;iostream&gt;

int main()
{
    std::cout &lt;&lt; (int)IDs::Peter &lt;&lt; ' ' &lt;&lt; (int)IDs::Karl &lt;&lt; ' ' &lt;&lt; (int)IDs::Volkard &lt;&lt; '\n';
	for (auto c : names) std::cout &lt;&lt; c &lt;&lt; '\n';
	for (auto c : pattern) std::cout &lt;&lt; c &lt;&lt; '\n';
}
</code></pre>
<p><a href="http://coliru.stacked-crooked.com/a/3c715243372836ae" rel="nofollow"><strong>Demo</strong></a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2448900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2448900</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 02 Apr 2015 14:40:42 GMT</pubDate></item><item><title><![CDATA[Reply to Vardiadisches Makro zum Initialisieren mehrerer Objekte on Tue, 07 Apr 2015 13:31:33 GMT]]></title><description><![CDATA[<p>Vielen Dank Leute! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2449374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2449374</guid><dc:creator><![CDATA[Dankator]]></dc:creator><pubDate>Tue, 07 Apr 2015 13:31:33 GMT</pubDate></item></channel></rss>