<?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[Fremden code in ein namespace einkapseln um konflikte zu vermeiden.. wie?]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich muss zur meiner Diplomarbeit eine Fremde Implementierung eines Algorithmus nutzen und diesr ist müllig programmiert. Wenn auch effizient.<br />
Das Problem ist, dass dort ALLE Klassen im globalen Namensraum (namespace) deklariert sind.<br />
Wenn ich also etwas davon einbinde kommt es zu Konflikten mit meinen Namesräumen.<br />
Ich würde aber gerne diesen fremden Code mit</p>
<pre><code>namespace assLib{
#include &lt;Matrix.h&gt;
}

assLib::Matrix(...)
</code></pre>
<p>einkapseln.<br />
Das Problem dabei ist, dass ich nun nicht weiss wie ich dem Linker mitteilen kann die Methoden in der fremden Bibliothke zu finden.</p>
<p>Hier eine Beispielstruktur aus dem fremden Code:<br />
Headerdatei Matrix.h:</p>
<pre><code>#include &quot;somefile.h&quot;
class Matrix
{
public:
...
}
</code></pre>
<p>Source Matrix.cpp:</p>
<pre><code>#include &quot;Matrix.h&quot;
...
</code></pre>
<p>Gibt es vielleicht eine andere Möglichkeit mit solchem Problem umzugehen?<br />
Leider ist es in meinem bereich sehr üblich, dass open source projekte an unis nicht von informatikern programiert wurden und solche &quot;feinheiten&quot; nicht beachtet werden.</p>
<p>Würde mich total freuen, wenn mir da jemand einen tipp geben könnte.</p>
<p>vielen dank und viele grüße</p>
<p>PS: ich nutze CMake um den Linker zu steuern.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269960/fremden-code-in-ein-namespace-einkapseln-um-konflikte-zu-vermeiden-wie</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 20:08:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269960.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 04 Jul 2010 19:09:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fremden code in ein namespace einkapseln um konflikte zu vermeiden.. wie? on Sun, 04 Jul 2010 19:09:31 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich muss zur meiner Diplomarbeit eine Fremde Implementierung eines Algorithmus nutzen und diesr ist müllig programmiert. Wenn auch effizient.<br />
Das Problem ist, dass dort ALLE Klassen im globalen Namensraum (namespace) deklariert sind.<br />
Wenn ich also etwas davon einbinde kommt es zu Konflikten mit meinen Namesräumen.<br />
Ich würde aber gerne diesen fremden Code mit</p>
<pre><code>namespace assLib{
#include &lt;Matrix.h&gt;
}

assLib::Matrix(...)
</code></pre>
<p>einkapseln.<br />
Das Problem dabei ist, dass ich nun nicht weiss wie ich dem Linker mitteilen kann die Methoden in der fremden Bibliothke zu finden.</p>
<p>Hier eine Beispielstruktur aus dem fremden Code:<br />
Headerdatei Matrix.h:</p>
<pre><code>#include &quot;somefile.h&quot;
class Matrix
{
public:
...
}
</code></pre>
<p>Source Matrix.cpp:</p>
<pre><code>#include &quot;Matrix.h&quot;
...
</code></pre>
<p>Gibt es vielleicht eine andere Möglichkeit mit solchem Problem umzugehen?<br />
Leider ist es in meinem bereich sehr üblich, dass open source projekte an unis nicht von informatikern programiert wurden und solche &quot;feinheiten&quot; nicht beachtet werden.</p>
<p>Würde mich total freuen, wenn mir da jemand einen tipp geben könnte.</p>
<p>vielen dank und viele grüße</p>
<p>PS: ich nutze CMake um den Linker zu steuern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921268</guid><dc:creator><![CDATA[mojo777]]></dc:creator><pubDate>Sun, 04 Jul 2010 19:09:31 GMT</pubDate></item><item><title><![CDATA[Reply to Fremden code in ein namespace einkapseln um konflikte zu vermeiden.. wie? on Sun, 04 Jul 2010 20:35:48 GMT]]></title><description><![CDATA[<p>Am besten wäre da natürlich Zugriff auf die eine oder andere Klasse, so dass du dort einen normalen Namensraum hinzufügn kannst.</p>
<p>Ansonsten fällt mir da eigentlich so auf die schnelle nur Makro Gefrickel ein, mit dem du dann Sachen umbenennst, aber das wird sehr hässlich, aber da hättest du dann ja sowieso Zugriff auf den Source Code und könntest auch gerade von Hand machen.</p>
<p>Ich würde eher probieren die Konflikte zu vermeiden, indem du nur den einen Header includest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921285</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921285</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 04 Jul 2010 20:35:48 GMT</pubDate></item><item><title><![CDATA[Reply to Fremden code in ein namespace einkapseln um konflikte zu vermeiden.. wie? on Mon, 05 Jul 2010 07:54:30 GMT]]></title><description><![CDATA[<p>Halo mojo777,</p>
<blockquote>
<p>... dass ich nun nicht weiss wie ich dem Linker mitteilen kann die Methoden in der fremden Bibliothke zu finden.</p>
</blockquote>
<p>Wie wird denn gelinkt ? statische lib, dynamische lib ???</p>
<p>Das beste wäre warswcheinlich,<br />
wenn du den fehlenden namespace einfügst und ihn,<br />
z.B. per #define aktivierst und die lib neu compilierst und linkst.</p>
<p>Bei einer dynamischen lib kannst du die symbole mit loadlibrary,<br />
... selbst, zur Laufzeit laden und hast damit keine probleme zur compilezeit.</p>
<p>Gruß Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921410</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 05 Jul 2010 07:54:30 GMT</pubDate></item><item><title><![CDATA[Reply to Fremden code in ein namespace einkapseln um konflikte zu vermeiden.. wie? on Mon, 05 Jul 2010 08:10:13 GMT]]></title><description><![CDATA[<p>Wenn die Bibliothek schon gebaut ist, dann liegen die Symbole darin im globalen namespace. Und wenn man den Header dann in eine &quot;using namespace XY&quot;-Klammer verpackt, wird der Linker garnichts mehr finden.<br />
Was du machen könntest wäre eine strikte Trennung der Bibliothek von deinem restlichen Code, indem du selbst einen Header definiert, der in einem angemessenen Namespace Funktionen bereitstellt, die so ähnlich (oder genauso) heißen wie die Bibliotheksfunktionen. In der .cpp zu diesem Header rufen die Funktionen dann einfach die Bibliotheksfunktionen auf.</p>
<pre><code class="language-cpp">//Bibliotheksheader

void SomeLibFunctionInGlobalScope();

//mylibwrapper.h
namespace wrapthelib
{
  void SomeLibFunction();
}

//mylibwrapper.cpp
#nclude libheader.h //die einzige Stelle, wo der Header eingebunden wird!

namespace wrapthelib
{
  void SomeLibFunction()
  {
    SomeLibFunctionInGlobalScope();
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1921425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921425</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 05 Jul 2010 08:10:13 GMT</pubDate></item><item><title><![CDATA[Reply to Fremden code in ein namespace einkapseln um konflikte zu vermeiden.. wie? on Mon, 05 Jul 2010 11:05:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>:<br />
(Das ist ne Ergänzung zu deinem Beitrag, ich gehe davon aus dass <em>du</em> das eh alles weisst)</p>
<p>Das geht gut, so lange die &quot;böse&quot; Library keine Namen exportiert (external linkage) die woanders auch noch vorkommen (CRT/SCL bzw. andere &quot;böse&quot; Library).<br />
Ansonsten klescht es beim Linken trotzdem.</p>
<p>Da hilft dann nur noch alle Source-Files abändern und die böse Library neu bauen.</p>
<p>Ohja: unter Windows geht die von dir beschriebene Methode schon, und zwar wenn man ne Wrapper-DLL verwendet. Ist aber genau genommen eine Verletzung der ODR, auch wenn die Implementierung in dem Fall garantiert dass es so funktioniert wie man möchte.<br />
(Wie das unter Linux mit SOs aussieht weiss ich nicht)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921529</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 05 Jul 2010 11:05:34 GMT</pubDate></item></channel></rss>