<?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[Macros in Klassendefinition]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab mal eine kurze Nachfrage. Ist folgendes Szenario kritisch?</p>
<p>In meiner Library habe ich folgende Klasse:</p>
<p>TestThread.h:</p>
<pre><code class="language-cpp">#ifndef TEST_THREAD_H_
#define TEST_THREAD_H_

#ifdef BOOST_THREAD_SUPPORT
	boost::thread thread;
#endif

class TestThread {

private:

#ifdef BOOST_THREAD_SUPPORT
	boost::thread thread;
#endif

	// ... andere class members (auch nach dem #ifdef)

};

#endif /* TEST_THREAD_H_ */
</code></pre>
<p>TestThread.cpp:</p>
<pre><code class="language-cpp">#define BOOST_THREAD_SUPPORT
#include &quot;TestThread.h&quot;
</code></pre>
<p>In meiner Anwendung möchte ich dann einfach TestThread.h includieren<br />
ohne boost-Library als include-Path.<br />
Muss ich irgendwelche Probleme befürchten? Mir ist klar dass ich bei<br />
statischen Libraries die Boost-Thread-Library mitlinken muss.<br />
(Bei dynamischen (glaub ich) nicht)</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236832/macros-in-klassendefinition</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 16:36:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236832.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Mar 2009 13:55:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Macros in Klassendefinition on Fri, 20 Mar 2009 13:56:13 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab mal eine kurze Nachfrage. Ist folgendes Szenario kritisch?</p>
<p>In meiner Library habe ich folgende Klasse:</p>
<p>TestThread.h:</p>
<pre><code class="language-cpp">#ifndef TEST_THREAD_H_
#define TEST_THREAD_H_

#ifdef BOOST_THREAD_SUPPORT
	boost::thread thread;
#endif

class TestThread {

private:

#ifdef BOOST_THREAD_SUPPORT
	boost::thread thread;
#endif

	// ... andere class members (auch nach dem #ifdef)

};

#endif /* TEST_THREAD_H_ */
</code></pre>
<p>TestThread.cpp:</p>
<pre><code class="language-cpp">#define BOOST_THREAD_SUPPORT
#include &quot;TestThread.h&quot;
</code></pre>
<p>In meiner Anwendung möchte ich dann einfach TestThread.h includieren<br />
ohne boost-Library als include-Path.<br />
Muss ich irgendwelche Probleme befürchten? Mir ist klar dass ich bei<br />
statischen Libraries die Boost-Thread-Library mitlinken muss.<br />
(Bei dynamischen (glaub ich) nicht)</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683410</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 20 Mar 2009 13:56:13 GMT</pubDate></item><item><title><![CDATA[Reply to Macros in Klassendefinition on Fri, 20 Mar 2009 14:03:48 GMT]]></title><description><![CDATA[<p>Inwiefern kritisch? Makros werden durch den Präprozessor aufgelöst, also vor dem eigentlichen Kompiliervorgang. Und zu diesem Zeitpunkt kann von so etwas wie Klassen noch keine Rede sein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683421</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 20 Mar 2009 14:03:48 GMT</pubDate></item><item><title><![CDATA[Reply to Macros in Klassendefinition on Fri, 20 Mar 2009 14:09:56 GMT]]></title><description><![CDATA[<p>Kritisch ist wahrscheinlich vor allem, dass nach der Konstruktion eins <code>boost::thread</code> Objekt, der Thread gleich gestartet wird. Also ein <code>boost::thread</code> als Klassenmember oder globale Variable dürfte wohl kaum das sein, was du willst <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>
<p>Ansonsten dürfte vielleicht die Lektüre dieses Threads, den wir erst gerade kürzlich hatten, interessant für dich sein:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-236515.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-236515.html</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683427</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 20 Mar 2009 14:09:56 GMT</pubDate></item><item><title><![CDATA[Reply to Macros in Klassendefinition on Fri, 20 Mar 2009 14:15:59 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>vielen Dank für eure Antworten.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Die Reihenfolge der class members verändert sich ja und wenn Referenzen<br />
nur relativ zum Objekt ausgedrückt werden, dann würde ja auf einen anderen Speicherbereich gezeigt weden.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a>: Du hast absolut Recht. Ich hatte das Problem wohl unglücklich auf diesen<br />
Beispiel-Code übertragen ^^</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683436</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 20 Mar 2009 14:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to Macros in Klassendefinition on Fri, 20 Mar 2009 14:16:17 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Wenn ich Dich richtig verstehe, willst Du die Abhängigkeiten von <code>boost::thread</code> aus Deinem Header heraus haben.<br />
Das kannst Du durch Vorwärtsdeklaration lösen:</p>
<pre><code class="language-cpp">//MyCrazyClass.h
#include &lt;memory&gt;

namespace boost
{
    class thread;
}

class MyCrazyClass
{
public:
    MyCrazyClass
        ();
   //bla...
private:
    std::auto_ptr&lt;boost::thread&gt; theThread;
};

//MyCrazyClass.cpp
MyCrazyClass
    ( )
    : theThread(new boost::thread(thread_fkt)
{ }

//...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1683437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683437</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 20 Mar 2009 14:16:17 GMT</pubDate></item><item><title><![CDATA[Reply to Macros in Klassendefinition on Fri, 20 Mar 2009 14:19:40 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Die Reihenfolge der class members verändert sich ja und wenn Referenzen<br />
nur relativ zum Objekt ausgedrückt werden, dann würde ja auf einen anderen Speicherbereich gezeigt weden.</p>
</blockquote>
<p>Du kompilierst ja aber auch immer neu? Oder verstehe ich dich falsch? Die Klasse verändert ihre Struktur nicht zur Laufzeit.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683440</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 20 Mar 2009 14:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to Macros in Klassendefinition on Fri, 20 Mar 2009 14:30:25 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4465">@Tachyon</a>: Die Vorwärtsdeklaration habe ich völlig vernachlässigt.<br />
Und wie mache ich das, wenn es keine Klasse ist, sondern ein typedef? Dann geht das ja so nicht mehr.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a>: Klar muss ich neu kompilieren.<br />
wenn ich dann meine Lib erzeugt habe und da drin steht:<br />
0x0000000 boost:thread_var<br />
0x0000015 next_var</p>
<p>Wenn jetzt der Compiler solche Sachen relativ zum Objekt adressieren würde,<br />
dann würde er bei meiner Applikation next_var an der Stelle 0x00000000 suchen, weil<br />
die boost:thread_var ja nicht in der Definition stand.</p>
<p>In diese Richtung ging meine Befürchtung.<br />
Es hat zwar geklappt, aber ich wußte nicht, ob evtl. durch irgendwelche Compiler-<br />
Optimierungen und ich mich darauf nicht verlassen kann</p>
<p>CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683444</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 20 Mar 2009 14:30:25 GMT</pubDate></item><item><title><![CDATA[Reply to Macros in Klassendefinition on Fri, 20 Mar 2009 15:53:03 GMT]]></title><description><![CDATA[<p>@CSpille,<br />
Du weisst aber schon, was ein Präprozessor ist? Das ist eine dumme Textersetzungsmaschine. Und erst wenn der Präprozessor durch ist, geht es an den Kompiler. Wenn du das eine Mal <code>BOOST_THREAD_SUPPORT</code> definiert hast und das andere Mal nicht, dann werden da unterschiedliche Codes an den Kompiler übermittelt. Einmal ist halt die Variable da und das andere Mal nicht. Und solange du dich auf diese Position nicht verlässt, was man normalerweise auch nicht tut, dann passiert da nix. Der Kompiler merkt nicht einmal, dass da mal was hingeschrieben wurde, wenn zum Beispiel <code>BOOST_THREAD_SUPPORT</code> nicht definiert ist.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683495</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 20 Mar 2009 15:53:03 GMT</pubDate></item></channel></rss>