<?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[Warum nicht von STL-Kontainern ableiten?]]></title><description><![CDATA[<p>Hallo,<br />
habe in Erinnerung man sollte nicht von STL Kontainern (Bsp: std::vector) ableiten.<br />
Warum nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/182555/warum-nicht-von-stl-kontainern-ableiten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 03:40:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182555.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 May 2007 15:03:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Sat, 26 May 2007 15:03:03 GMT]]></title><description><![CDATA[<p>Hallo,<br />
habe in Erinnerung man sollte nicht von STL Kontainern (Bsp: std::vector) ableiten.<br />
Warum nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292676</guid><dc:creator><![CDATA[scrontch]]></dc:creator><pubDate>Sat, 26 May 2007 15:03:03 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Sat, 26 May 2007 15:45:05 GMT]]></title><description><![CDATA[<p>sie wurden nicht darauf ausgelegt basisklassen zu sein, und du wirst grundsätzlich undefiniertes verhalten bekommen wenn du memberfunktionen überscheiben willst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292693</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Sat, 26 May 2007 15:45:05 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Sat, 26 May 2007 16:29:10 GMT]]></title><description><![CDATA[<p>r0nny schrieb:</p>
<blockquote>
<p>sie wurden nicht darauf ausgelegt basisklassen zu sein, und du wirst grundsätzlich undefiniertes verhalten bekommen wenn du memberfunktionen überscheiben willst</p>
</blockquote>
<p>undefiniertes Verhalten?<br />
Stimmt das wirklich?<br />
Wird nicht, wenn du eine Methode aufrufst die Methode des Objekt-Typs aufgerufen,<br />
das zur Komipilierzeit ermittelbar ist? Also wenn du einen Zeiger auf dein Objekt<br />
als vector hast, wird er (wegen der fehlenden V-Table) die Basisfunktion aufrufen,<br />
falls du ein Zeiger auf MyClass hast, die überschriebene Funktion.</p>
<p>Ansonsten könnte man doch auch nicht privat von STL-Klassen ableiten, oder?</p>
<p>und eine Problem ist natürlich der fehlende virtuelle Destruktor, so dass ein Löschen<br />
als Basisklassen-Typ ein Speicherleck verursacht.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292713</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 26 May 2007 16:29:10 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Sat, 26 May 2007 16:55:52 GMT]]></title><description><![CDATA[<p>Nicht ableiten soll in der Regel nicht öffentlich ableiten heißen. Private Ableitung ist im Normalfall unkritisch, macht aber wenig Sinn - die üblichen Gründe (EBO oder rein virtuelle Funktionen, die erst noch überschrieben werden müssen) sind für Container nicht gegeben.<br />
Das liegt tatsächlich daran, dass es nicht vorgesehen ist. Standard-Container sind selbst nicht polymorph und als Value-Objekte anzusehen. Es macht schlicht keinen Sinn, davon öffentlich abzuleiten. Willst du einen eigenen Container adaptieren, benutze Aggregation. Dass es nebenbei undefiniert wird, wenn du den Container über einen Zeiger auf die Basisklasse zerstören willst, ist eher nebensächlich.</p>
<p>r0nny schrieb:</p>
<blockquote>
<p>sie wurden nicht darauf ausgelegt basisklassen zu sein, und du wirst grundsätzlich undefiniertes verhalten bekommen wenn du memberfunktionen überscheiben willst</p>
</blockquote>
<p>Da nur virtuelle Funktionen überschrieben werden können und diese Container keine virtuellen Funktionen haben ist das keine nützliche Feststellung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292736</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 26 May 2007 16:55:52 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Sat, 26 May 2007 19:44:27 GMT]]></title><description><![CDATA[<p>Ich bin der Meinung, ableiten um die Schnittstelle zu ändern ist kein Problem (wird auch im Buch &quot;Die C++ Programmiersprache&quot; von Stroustroup gemacht).<br />
Also so etwas:</p>
<pre><code class="language-cpp">template &lt;class T, class A = std::allocator&lt;T&gt; &gt;
class MeinVector : public std::vector&lt;T, A&gt;
{
    typedef typename std::vector&lt;T, A&gt;::reference reference;
    typedef typename std::vector&lt;T, A&gt;::size_type size_type;

public:
    // Range check index operator
    reference operator [] (size_type n)
    {
        return at(n);
    }
};
</code></pre>
<p>Ob das Sinn macht, ist eine andere Frage. Ich denke eher nein. Wobei man nicht gleiche alle Fälle ausschließen sollte.<br />
z.B. neue Version eines Framework's steigt auf STL um, aus Kompatibilitätsgründen wird die schnittstelle angepasst.<br />
Weitere Gründe von STL-Containern abzuleiten kenne ich nicht.</p>
<p>MfG<br />
DDR-RAM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292821</guid><dc:creator><![CDATA[DDR-RAM]]></dc:creator><pubDate>Sat, 26 May 2007 19:44:27 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Sat, 26 May 2007 20:15:30 GMT]]></title><description><![CDATA[<p>Wo genau macht Stroustrup das?</p>
<p>Macht meiner Meinung nach nie Sinn. Es gibt zum Einen keine protected Member auf die man zugreifen können möchte und zum Anderen kann man das ganze nicht polymorph benutzen, da der Destruktor und auch keine Methode virtuell ist.<br />
Vielleicht versteh ich aber auch nur deine Begründung mit dem Framework falsch. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1292844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292844</guid><dc:creator><![CDATA[Konrad]]></dc:creator><pubDate>Sat, 26 May 2007 20:15:30 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Sat, 26 May 2007 21:10:55 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5021">@Konrad</a><br />
Dies hat schon sinn, aber nur unter der Bedingung, dass man niemals über den Basisklassenzeiger darauf zugreift.Das ist ein Wrapperersatz und kann dann eingesetzt werden, wenn man nur ein oder 2 methoden hinzufügen oder ändern will, dann braucht man nicht die 20 anderen methoden weiterleiten. Stell dir das am besten nicht als polymorphe Klassenhierarchie vor, sondern als einzelne voneinander unabhängige Klassen. Die Ableitung ist nur ein implementationsdetail.</p>
<p>In der STL implementation meines Compilers wird das zb so gemacht, da wird erst eine Klasse std::list_base erstellt, und davon dann die list abgeleitet. Da das normalerweise niemand weis, bzw nicht auf die idee kommt, nen basisklassenzeiger darauf zu erstellen, ist das okay.</p>
<p>Ist allerdings nur in einer generischen Umgebung sinnvoll:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Derived: public std::vector&lt;T&gt; 
{
    //operator[] const wird überschrieben
    const_reference operator [] (size_type n)const
    {
        return at(n);
    }
};

template&lt;class Vector&gt;
void foo(const Vector&amp; vector);
template&lt;class T&gt;
void bar(const std::vector&lt;T&gt;&amp; vector);

//in der main
Derived&lt;int&gt; foobar;
foo(foobar);//okay
bar(foobar);//autsch, impliziter basisklassencast, und die überschriebene                    
            //methode wird ignoriert, es herrscht wieder normales vector verhalten
           //würde jetzt der operator[] angewendet, wird kein range check mehr durchgeführt
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1292866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292866</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 26 May 2007 21:10:55 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Tue, 29 May 2007 23:10:29 GMT]]></title><description><![CDATA[<blockquote>
<p>Wo genau macht Stroustrup das?</p>
</blockquote>
<p>Die C++ Programmiersprache, 4. Aufflage, Addison-Wesley. In §3.7.2.</p>
<blockquote>
<p>Macht meiner Meinung nach nie Sinn.</p>
</blockquote>
<p>Sag niemals nie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<blockquote>
<p>Es gibt zum Einen keine protected Member auf die man zugreifen können möchte</p>
</blockquote>
<p>Nein aber public Methoden.</p>
<blockquote>
<p>und zum Anderen kann man das ganze nicht polymorph benutzen, da der Destruktor und auch keine Methode virtuell ist.</p>
</blockquote>
<p>Ja, kein Laufzeitpolymorphismus. Statischer Polymorphismus ist dennoch möglich.</p>
<blockquote>
<p>Vielleicht versteh ich aber auch nur deine Begründung mit dem Framework falsch. <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>
</blockquote>
<p>Könnte sein.<br />
Ich nehme als Beispiel einfach die Klasse CAtlArray aus der ATL. Das ganze ist natürlich hypothetisch. CAtlArray und std::vector vertragen sich ja nicht, weil sie komplett verschieden sind.<br />
Aber man könnte die Schnittstelle von std::vector auf CAtlArray umwrappen.</p>
<pre><code class="language-cpp">template &lt;class T, class ETraits = CElementTraits&lt;T&gt;, class A = std::allocator&lt;T&gt; &gt;
class CAtlArray : public std::vector&lt;T, A&gt;
{
/* vieles */

public:
    size_t GetCount() const throw()
    {   return  size(); }
    bool IsEmpty() const throw()
    {   return empty(); }

/* vieles */
};
</code></pre>
<p>10000ende Zeilen von Code, die bisher unter Verwendung von CAtlArray geschrieben wurden bleiben gültig. Dazu kommt, das man jetzt CAtlArray's überall dort verwenden kann, wo std::vector gefragt ist, weil CAtlArray nur einen Zweck erfüllt, std::vector aus Kompatibilitätsgründen zu wrappen. Daher sehe ich auch das Beispiel von otze als falsch an. Der implizite Basisklassencast ist nicht wirklich schlimm oder ungewollt.<br />
Eine Funktion, die mit std::vector arbeitet und den ungeprüften Indexoperator verwendet, tut die in der Regel zurecht. (z.B. iteration über alle Indices)<br />
Sonst würde sie auf einem std::vector mit gleichen Inhalt undefiniertes Verhalten auslösen.<br />
Man erkennt schon an dem Beispiel, das die ganze Sache recht weit hergeholt klingt, aber irgendein Framework leitet tatsächlich von std::string ab, weiß dazu jetzt aber nichts genaueres.</p>
<p>MfG<br />
DDR-RAM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294881</guid><dc:creator><![CDATA[DDR-RAM]]></dc:creator><pubDate>Tue, 29 May 2007 23:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Wed, 30 May 2007 07:20:38 GMT]]></title><description><![CDATA[<p>das mit der indexprüfung war ja nur ein beispiel, aber wenn jetzt zb eine methode überschrieben wird, sodass sich ihr verhalten wirklich ändert, dann wär der basisklassencast tödlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1294954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1294954</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 30 May 2007 07:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Thu, 31 May 2007 18:06:16 GMT]]></title><description><![CDATA[<p>Die Methoden werden aber nicht überschrieben, höchstens überdeckt.<br />
Und die Funktion, die std::vector verwendet, möchte bei Aufruf von begin einen iterator erhalten, der auf den Anfang zeigt und nichts anderes! Diese Funktionalität ist perfekt in std::vector implementiert. Was soll die Wrapperklasse da noch rumwerkeln?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296179</guid><dc:creator><![CDATA[DDR-RAM]]></dc:creator><pubDate>Thu, 31 May 2007 18:06:16 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Thu, 31 May 2007 18:26:17 GMT]]></title><description><![CDATA[<p>Jo, habt Recht. Habe dabei nicht an statischen Polymorphismus gedacht. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1296187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296187</guid><dc:creator><![CDATA[Konrad]]></dc:creator><pubDate>Thu, 31 May 2007 18:26:17 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Thu, 31 May 2007 18:58:00 GMT]]></title><description><![CDATA[<p>Warum für diese Zwecke öffentlich abgeleitet werden soll, will mir trotzdem nicht einleuchten. Private Vererbung + using tut es auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296201</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 31 May 2007 18:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Fri, 01 Jun 2007 12:05:01 GMT]]></title><description><![CDATA[<p>Warum private-Vererbung?<br />
Private-Vererbung ohne polymorphismus macht für mich eher wenig sinn -&gt; Komposition.<br />
Außerdem: im Stroustroup-Fall soll nur eine Methode überdeckt werden, alle anderen bleiben identisch und sollen auch öffentlich sichtbar sein!<br />
Im zweiten Frameworkkompatibilitätsfall:<br />
Es geht ja gerade darum, dass sich die vector-klasse jetzt genauso, wie std::vector verhält und andere Methoden nur aus Kompatibilitätsgründen da sind.<br />
Beispiel</p>
<pre><code class="language-cpp">// alter Code

void foo2(int&amp; i, int j);

void foo(FW::CVector&lt;int&gt;&amp; rVec)
{
    for (size_t i = 0; i &lt; rVec.GetCount(); ++i)
        foo2(rVec[i], i);
}

//  fester Code, andere externe lib
void bar(std::vector&lt;int&gt;&amp; rVec)
{
    for_each(rVec.begin(), rVec.end(), bar2());
}

//  und ein neu geschriebenes Code schnippsel

void foobar(FW::CVector&lt;int&gt;&amp; rVec)
{
    //  nutze Framework-Funktionen
    foo(rVec);
    //  nutze externe lib
    bar(rVec); // private Vererbung, wäre hier nicht gut ;)
}
</code></pre>
<p>Das ganze ist natürlich sehr Bruchstückhaft und gestellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296555</guid><dc:creator><![CDATA[DDR-RAM]]></dc:creator><pubDate>Fri, 01 Jun 2007 12:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Fri, 01 Jun 2007 13:02:06 GMT]]></title><description><![CDATA[<p><a href="http://groups.google.de/group/comp.lang.c++.moderated/browse_thread/thread/372b70780904e951/14c23db8374527dd?lnk=raot&amp;hl=de#14c23db8374527dd" rel="nofollow">private inheritance vs containment</a><br />
Und auch interessant: <a href="http://www.parashift.com/c++-faq-lite/private-inheritance.html" rel="nofollow">http://www.parashift.com/c++-faq-lite/private-inheritance.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296622</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 01 Jun 2007 13:02:06 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Fri, 01 Jun 2007 13:49:23 GMT]]></title><description><![CDATA[<p>Letztlich ist private Vererbung nur eine Form von Aggregation (solange man daraus nicht über friends öffentliche Vererbung macht) - prinzipiell kommt man immer ohne sie aus. Ihre Verwendung muss also in ihrer Zweckmäßigkeit liegen. In Fällen wie diesen bedeutet es erheblich weniger Aufwand; bei echter Aggregation müssen wir jede Funktion neu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296665</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 01 Jun 2007 13:49:23 GMT</pubDate></item><item><title><![CDATA[Reply to Warum nicht von STL-Kontainern ableiten? on Fri, 01 Jun 2007 20:53:49 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a>: Was genau hat das jetzt mit dem Thema zu tun? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Was willst du damit sagen? Für mich liest sich das so, als ob das was ich sage stimmt.<br />
Für alle die kein Englisch können:</p>
<ul>
<li>private-Vererbung ist quasi eine Komposition mit gewissen Zusätzen:<br />
man kann auf protected-member zugeifen (entfällt bei der stl).</li>
<li>Member können den Zeiger auf die abgeleitete Klasse zum Basisklassenzeiger konvertieren (bei der normalen Komposition erhält man übrigens auch sehr leicht einen Zeiger auf diese klasse),</li>
<li>man kann virtual-methoden überschreiben (entfällt auch bei der stl),</li>
<li>bei private-vererbung ist das durchreichen der Funktionen einfacher (weniger Zeichen im Code) als bei normaler Komposition,</li>
<li>private-Vererbung bringt keinen Performance-Vorteil,</li>
<li>private-Vererbung bringt mehr zusätzliche Abhängigkeiten</li>
</ul>
<p>Was heißt das?<br />
Wir können private-Vererbung außen vorlassen. Eine Komposition von stl-containern ist etwas sehr natürliches und muss hier auch nicht weiter erwähnt werden.<br />
Nochmal zur Framework-sache:</p>
<ul>
<li>FW::CVector&lt;int&gt;* soll in std::vector&lt;int&gt;* implizit konvertiert werden können,</li>
<li>Über FW::CVector&lt;int&gt;* soll direkt auf alle std::vector&lt;int&gt;* Methoden zugegriffen werden können</li>
<li>FW::CVector&lt;int&gt; erweitert oder verändert die Schnittstelle von std::vector&lt;int&gt;</li>
</ul>
<p>FW::CVector&lt;int&gt; ist ein std::vector&lt;int&gt; !</p>
<p>Sollte nicht die komplette Schnittstelle verfügbar sein soll, die std::vector&lt;int&gt; bietet, dann kann man das durch private-überdeckung regeln.<br />
Falls FW::CVector&lt;int&gt;* nicht implizit in std::vector&lt;int&gt;* konvertiert werden können soll, dann ist natürlich eine Form der Komposition zu wählen.<br />
z.B.</p>
<pre><code class="language-cpp">class CIntVectorMitZugriffsCounter : public std::vector&lt;int&gt;
{
public:
    int operator [](size_type n)
    {
        ++m_nCount;
        return  std::vector&lt;int&gt;::operator[](n);
    }

private:
    size_t m_nCount;
};
</code></pre>
<p>Richtig ist, dass das nicht sinnvoll ist, da std::vector&lt;int&gt; kein polymorher Typ ist. Hier ist, wie bereits erwähnt, eine Form der Komposition zu wählen.</p>
<p>edit:<br />
Ich sage mal so, in der Regel ist das ableiten von STL-Containern einfach nur ein Anfängerfehler. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296909</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296909</guid><dc:creator><![CDATA[DDR-RAM]]></dc:creator><pubDate>Fri, 01 Jun 2007 20:53:49 GMT</pubDate></item></channel></rss>