<?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[constexpr workaround]]></title><description><![CDATA[<p>hallo leute</p>
<p>verwende VC++2013 und brauch einen workaround fuer constexpr, falls es sowas irgendwie gibt.<br />
folgendes moechte ich machen:</p>
<pre><code>constexpr int get_id(void *base, void *obj)
{
   return 1000 + (reinterpret_cast&lt;const char*&gt;(obj) - reinterpret_cast&lt;const char*&gt;(base));
}

class myclass
{
   public:
      eine_klasse eins;
      eine_klasse zwei;
      eine_klasse drei;

      void mach_was(int id);
};

void myclass::mach_was(int id)
{
   switch(id)
   {
      case: get_id(this, &amp;eins): mach_eins(); break;
      case: get_id(this, &amp;zwei): mach_zwei(); break;
      case: get_id(this, &amp;drei): mach_drei(); break;

      default:
         blub();
   }
}
</code></pre>
<p>ich will also die objektposition in der klasse bestimmen und dann als id in switch-case verwenden.</p>
<p>jemand ne idee ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332539/constexpr-workaround</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 19:19:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332539.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 May 2015 09:02:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to constexpr workaround on Thu, 07 May 2015 09:02:29 GMT]]></title><description><![CDATA[<p>hallo leute</p>
<p>verwende VC++2013 und brauch einen workaround fuer constexpr, falls es sowas irgendwie gibt.<br />
folgendes moechte ich machen:</p>
<pre><code>constexpr int get_id(void *base, void *obj)
{
   return 1000 + (reinterpret_cast&lt;const char*&gt;(obj) - reinterpret_cast&lt;const char*&gt;(base));
}

class myclass
{
   public:
      eine_klasse eins;
      eine_klasse zwei;
      eine_klasse drei;

      void mach_was(int id);
};

void myclass::mach_was(int id)
{
   switch(id)
   {
      case: get_id(this, &amp;eins): mach_eins(); break;
      case: get_id(this, &amp;zwei): mach_zwei(); break;
      case: get_id(this, &amp;drei): mach_drei(); break;

      default:
         blub();
   }
}
</code></pre>
<p>ich will also die objektposition in der klasse bestimmen und dann als id in switch-case verwenden.</p>
<p>jemand ne idee ?</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452825</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Thu, 07 May 2015 09:02:29 GMT</pubDate></item><item><title><![CDATA[Reply to constexpr workaround on Thu, 07 May 2015 09:09:04 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/cstddef/offsetof/" rel="nofollow">offsetof()</a>.</p>
<p><em>Edit:</em> Sorry, geht nicht, das ist für den Compiler kein konstanter Ausdruck.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452826</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Thu, 07 May 2015 09:09:04 GMT</pubDate></item><item><title><![CDATA[Reply to constexpr workaround on Thu, 07 May 2015 10:43:59 GMT]]></title><description><![CDATA[<p>Nein, es ist unmoeglich. U.a. weil man in einer core constant expression keinen Zeiger haben kann der nicht auf ein Objekt dessen Typs zeigt. ( <code>void*</code> ist gewissermassen eine Ausnahme.) Der abstrakte Grund ist dass constant expressions moeglichst portabel sein sollen, die Werte die du aber extrahieren willst sind schon an sich voellig implementierungsspezifisch - nicht einmal fuer Standard-layout Klassen ist der Offset definiert*, lediglich dass Member in ihrer Deklarationsreihenfolge aufsteigende Adressen haben.</p>
<p>Potenziell kommst du mit <code>__builtin_offsetof</code> weiter. Dieses Intrinsic ist naemlich mit sowohl Clang als auch GCC so verwendbar:</p>
<pre><code>struct A{int a;};
int main() {
    constexpr auto i = __builtin_offsetof(A, a);
}
</code></pre>
<p>* Ausnahme ist natuerlich die erste (nicht-statische) Membervariable.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452844</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 07 May 2015 10:43:59 GMT</pubDate></item></channel></rss>