<?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[Abstrakte Klasse als Typ eines Container]]></title><description><![CDATA[<p>Ich habe eine (abstrakte) Klasse die eine abstrakte Methode hat:</p>
<pre><code class="language-cpp">class CInterfaceObject
{
public:
    virtual void Tick(boolean &amp;ProcessInput) abstract;
}
</code></pre>
<p>Jetzt ist das Problem, dass wenn ich versuche die Klasse als Typ eines boost::PTR_Containers zu verwenden (oder einem std::container)</p>
<pre><code class="language-cpp">boost::ptr_vector&lt;CInterfaceObject&gt; InterfaceObjects;
</code></pre>
<p>Dann meckert er das er keine Instanz davon erstellen kann(was ja ansich verständlich ist) - nur ich will ja ansich keine Objekte/Pointer von der abstrakten Klasse speichern sondern nur Objekte der abgeleiteten Klassen die Tick implementieren. Wenn man den Fehler beim ptr_vector anguckt dann steht bei der Fehlerstelle:</p>
<p>//<br />
// @remark: if you get a compile-error here,<br />
// it is most likely because you did not<br />
// define new_clone( const T&amp; ) in the namespace<br />
// of T.<br />
//</p>
<p>Ich weiß aber nicht ob das für mich zutrifft. Btw: Ich habe nicht allzuviel Ahnung von Templates</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/214440/abstrakte-klasse-als-typ-eines-container</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 15:40:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/214440.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 May 2008 10:02:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Abstrakte Klasse als Typ eines Container on Thu, 29 May 2008 10:02:16 GMT]]></title><description><![CDATA[<p>Ich habe eine (abstrakte) Klasse die eine abstrakte Methode hat:</p>
<pre><code class="language-cpp">class CInterfaceObject
{
public:
    virtual void Tick(boolean &amp;ProcessInput) abstract;
}
</code></pre>
<p>Jetzt ist das Problem, dass wenn ich versuche die Klasse als Typ eines boost::PTR_Containers zu verwenden (oder einem std::container)</p>
<pre><code class="language-cpp">boost::ptr_vector&lt;CInterfaceObject&gt; InterfaceObjects;
</code></pre>
<p>Dann meckert er das er keine Instanz davon erstellen kann(was ja ansich verständlich ist) - nur ich will ja ansich keine Objekte/Pointer von der abstrakten Klasse speichern sondern nur Objekte der abgeleiteten Klassen die Tick implementieren. Wenn man den Fehler beim ptr_vector anguckt dann steht bei der Fehlerstelle:</p>
<p>//<br />
// @remark: if you get a compile-error here,<br />
// it is most likely because you did not<br />
// define new_clone( const T&amp; ) in the namespace<br />
// of T.<br />
//</p>
<p>Ich weiß aber nicht ob das für mich zutrifft. Btw: Ich habe nicht allzuviel Ahnung von Templates</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1518965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1518965</guid><dc:creator><![CDATA[FunMaker]]></dc:creator><pubDate>Thu, 29 May 2008 10:02:16 GMT</pubDate></item><item><title><![CDATA[Reply to Abstrakte Klasse als Typ eines Container on Thu, 29 May 2008 10:21:31 GMT]]></title><description><![CDATA[<p>wie erstellst du denn den ptr_vector? bissl code wär ganz nützlich.</p>
<p>aber da ich ne kleine idee hab, zitier ich mal was aus der boost referenz:<br />
<a href="http://www.boost.org/doc/libs/1_35_0/libs/ptr_container/doc/tutorial.html" rel="nofollow">http://www.boost.org/doc/libs/1_35_0/libs/ptr_container/doc/tutorial.html</a><br />
(abschnitt cloneability)</p>
<blockquote>
<p>Copying or assigning the container has the same effect as cloning (though it is slightly cheaper):</p>
<p>zoo_type yet_another_zoo = zoo;</p>
</blockquote>
<p>wenn du im ptr_vector eine funktion verwendest, die in irgendeiner weise objekte kopiert, muss eine gültige new_clone funktion bestehen. Für die normalen Fälle hat der ptr_vector eine passende implementation. Dein Fall ist aber nicht normal, da du nur abstrakte Basisklassen speicherst. Abstrakte basisklassen sind nicht einfach kopierbar, sondern brauchen eine clone funktion.</p>
<p>Beispielsweise:</p>
<pre><code class="language-cpp">class Base
{
    public:
        virtual Base* clone()const=0;
};

Base* new_clone(const Base&amp; b)
{
     return b-&gt;clone();
}
class Derived
{
    public:
        virtual Derived* clone()const
        {
            return new Derived(*this);
        }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1518972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1518972</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 29 May 2008 10:21:31 GMT</pubDate></item><item><title><![CDATA[Reply to Abstrakte Klasse als Typ eines Container on Thu, 29 May 2008 10:19:38 GMT]]></title><description><![CDATA[<p>Abstrakte Methoden in C++ werden wie folgt deklariert:</p>
<pre><code class="language-cpp">class CInterfaceObject
{
public:
    virtual void Tick(boolean &amp;ProcessInput) = 0;
}
</code></pre>
<p>UND</p>
<p>Klassen in C++/CLI werden wie folgt deklariert:</p>
<pre><code class="language-cpp">ref class CInterfaceObject
{
public:
    virtual void Tick(boolean &amp;ProcessInput) abstract;
}
</code></pre>
<p>Beides Zusammen geht schlecht.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1518980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1518980</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Thu, 29 May 2008 10:19:38 GMT</pubDate></item><item><title><![CDATA[Reply to Abstrakte Klasse als Typ eines Container on Thu, 29 May 2008 10:40:37 GMT]]></title><description><![CDATA[<p>Dank euch, habs jetzt hinbekommen und war einfacher als gedacht. Ich hatte es bereits versucht eine new_clone Funktion als Methode der abstrakten Klasse zu erstellen, aber das hatte nicht funktioniert, nun steht sie ausserhalb der Klasse im entsprechenden Namespace.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1518995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1518995</guid><dc:creator><![CDATA[FunMaker]]></dc:creator><pubDate>Thu, 29 May 2008 10:40:37 GMT</pubDate></item></channel></rss>