<?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[Allocator in Library einbinden]]></title><description><![CDATA[<p>Hallo,<br />
angenommen ich schreibe eine Library und moechte, dass diese wahlweise einen anderen Allocator zur Speicherverwaltung nutzt. Dieser soll sich also in jedem Projekt, wo die Bibo genutzt wird aendern lassen.<br />
Wie wuerde man das am besten loesen?<br />
Jede Klasse, die dynamisch Speicher anfordert, mit einem template-Parameter zu versehen faellt fuer mich flach.<br />
Damit ist die einzige Moeglichkeit, die mir noch einfaellt, beim Bauen der Library ein define zu setzen, was dann ggf. einen Header einbindet, der einen anderen Allocator beinhaltet (so mache ich es im Moment).<br />
Dann muesste man natuerlich bei Nutzung eines anderen Allocators die ganze Lib neubauen, aber das waere bei templates ja wohl auch der Fall (bzw wuerde das implizit immer gemacht werden, weil alles im Header liegen wuerde &lt;_&lt;).<br />
Meine eigentlich Frage ist nun: fallen euch Alternativen dazu ein? Ich wuerde defines dieser Art gerne vermeiden wenn es denn moeglich ist und mich gern ueber andere Wege aufklaeren lassen.<br />
Hoffe das Problem ist verstaendlich erklaert.</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243911/allocator-in-library-einbinden</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 16:50:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243911.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Jun 2009 19:11:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Allocator in Library einbinden on Mon, 22 Jun 2009 19:11:45 GMT]]></title><description><![CDATA[<p>Hallo,<br />
angenommen ich schreibe eine Library und moechte, dass diese wahlweise einen anderen Allocator zur Speicherverwaltung nutzt. Dieser soll sich also in jedem Projekt, wo die Bibo genutzt wird aendern lassen.<br />
Wie wuerde man das am besten loesen?<br />
Jede Klasse, die dynamisch Speicher anfordert, mit einem template-Parameter zu versehen faellt fuer mich flach.<br />
Damit ist die einzige Moeglichkeit, die mir noch einfaellt, beim Bauen der Library ein define zu setzen, was dann ggf. einen Header einbindet, der einen anderen Allocator beinhaltet (so mache ich es im Moment).<br />
Dann muesste man natuerlich bei Nutzung eines anderen Allocators die ganze Lib neubauen, aber das waere bei templates ja wohl auch der Fall (bzw wuerde das implizit immer gemacht werden, weil alles im Header liegen wuerde &lt;_&lt;).<br />
Meine eigentlich Frage ist nun: fallen euch Alternativen dazu ein? Ich wuerde defines dieser Art gerne vermeiden wenn es denn moeglich ist und mich gern ueber andere Wege aufklaeren lassen.<br />
Hoffe das Problem ist verstaendlich erklaert.</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731236</guid><dc:creator><![CDATA[der_library_builder]]></dc:creator><pubDate>Mon, 22 Jun 2009 19:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Allocator in Library einbinden on Mon, 22 Jun 2009 19:15:29 GMT]]></title><description><![CDATA[<p>was ich noch vergessen hatte zu erwaehnen: es handelt sich um einen Allocator im std::allocator Stil, also mit diesem Interface - mit all seinen Problemen und Macken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731241</guid><dc:creator><![CDATA[der_library_builder]]></dc:creator><pubDate>Mon, 22 Jun 2009 19:15:29 GMT</pubDate></item><item><title><![CDATA[Reply to Allocator in Library einbinden on Mon, 22 Jun 2009 19:25:52 GMT]]></title><description><![CDATA[<p>Grundsätzlich wäre <code>typedef</code> noch etwas, aber das ist natürlich ungeeignet, wenn ein Typ parametrisiert werden muss. Template-Typedefs gibts ja noch nicht. Der Workaround wäre wohl auch ein wenig weit hergeholt:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
struct AllocatorType
{
    typedef MyAllocator&lt;T&gt; type; // MyAllocator kann ausgewechselt werden
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1731246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731246</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 22 Jun 2009 19:25:52 GMT</pubDate></item><item><title><![CDATA[Reply to Allocator in Library einbinden on Mon, 22 Jun 2009 20:58:55 GMT]]></title><description><![CDATA[<p>Danke fuer Deine Antwort.<br />
Ein typedef loest aber das Problem nicht, dass der Benutzer der Bibliothek seinen <strong>eigenen</strong> Allocator einbinden koennen soll. Es geht darum, den Allocator bekannt zu machen, damit meine ich effektiv seine Interna. Denn auch wenn er sich an ein bekanntes Interface haelt, muss dennoch die Implementierung bekannt sein, damit er verwendet werden kann (etwa von Containern der STL), weil es sich um compile-time polymophie (templates) handelt (korrigiert mich, wenn ich mich irren sollte).</p>
<p>Zur Veranschaulichung:<br />
ich habe folgenden Header</p>
<pre><code class="language-cpp">// Allocator.hpp

#ifdef CUSTOM_ALLOCATOR_INCLUDE
#  include CUSTOM_ALLOCATOR_INCLUDE
#else
#  include &lt;memory&gt;

namespace foo
{
  typedef std::allocator&lt;int&gt; Allocator;
}

#endif
</code></pre>
<p>Jetzt kann uniform auf einen Allocator fuer einen beliebigen Typ zugegriffen werden, so z.B.</p>
<pre><code class="language-cpp">std::vector&lt;long, foo::Allocator::rebind&lt;long&gt;::other&gt;
</code></pre>
<p>Soweit, so gut. In diesem Beispiel kann also mit Hilfe von z.B.</p>
<pre><code class="language-cpp">#define CUSTOM_ALLOCATOR_INCLUDE &lt;MallocAllocator.hpp&gt;
</code></pre>
<p>ein anderer Allocator bekannt gemacht werden (der im namespace foo als typedef Allocator bereitsteht). Wobei das eher projektweit definiert und auch die Bibliothek damit neu kompiliert werden muss (also eher kein define in dem Sinne, sondern eine configure option oder eine Einstellung im Projekt).<br />
Man beachte dabei, dass Allocator.hpp (der obige Header) zur Bibliothek gehoert (welche Nutzer natuerlich nicht im Code veraendern sollen), sondern nur in diesem Beispiel um einen anderen Allocator ergaenzen, der von irgendwo her kommen kann.</p>
<p>Aber desto mehr ich darueber nachdenke desto eher glaube ich, es geht nicht anders. Wenn dennoch Ideen vorhanden sind: immer her damit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1731294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1731294</guid><dc:creator><![CDATA[der_library_builder]]></dc:creator><pubDate>Mon, 22 Jun 2009 20:58:55 GMT</pubDate></item></channel></rss>