<?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[too few template-arguments-lists]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgende Singleton-Objekte:</p>
<pre><code class="language-cpp">// Datei A.hpp
template &lt;class T&gt;
class A{
private:
   static A&lt;T&gt;* Instance;

   // Ctor und Copy-Ctor
public:
   static A&lt;T&gt;* getInstance(){
       if(!Instance){
          Instance = new T();
          return Instance;
       }
       return Instance;
   }
protected:
   // Irgendwelche Schnittstellendefinitionen 
};

// Datei B.hpp
class B : public A&lt;B&gt;{
friend class A&lt;B&gt;;
private:
   // Ctor und Copy-Ctor
public:
   // Schnittstellimplementierungen
};
A&lt;B&gt;* A&lt;B&gt;::Instance = NULL;
</code></pre>
<p>Kompiliere ich obiges Konstukt mit dem MSVC in der 2008er Version, erhalte ich keine Fehler. Selbiges wird aber unter NetBeans mit dem g++-Compiler (Müsste die neuste Version 4.4 sein) in Zeile 28 immer mit der Fehlermeldung: &quot;Too few template-arguments-lists&quot; quittiert. Was mache ich hier falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244983/too-few-template-arguments-lists</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 23:40:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244983.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Jul 2009 15:19:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 15:19:06 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgende Singleton-Objekte:</p>
<pre><code class="language-cpp">// Datei A.hpp
template &lt;class T&gt;
class A{
private:
   static A&lt;T&gt;* Instance;

   // Ctor und Copy-Ctor
public:
   static A&lt;T&gt;* getInstance(){
       if(!Instance){
          Instance = new T();
          return Instance;
       }
       return Instance;
   }
protected:
   // Irgendwelche Schnittstellendefinitionen 
};

// Datei B.hpp
class B : public A&lt;B&gt;{
friend class A&lt;B&gt;;
private:
   // Ctor und Copy-Ctor
public:
   // Schnittstellimplementierungen
};
A&lt;B&gt;* A&lt;B&gt;::Instance = NULL;
</code></pre>
<p>Kompiliere ich obiges Konstukt mit dem MSVC in der 2008er Version, erhalte ich keine Fehler. Selbiges wird aber unter NetBeans mit dem g++-Compiler (Müsste die neuste Version 4.4 sein) in Zeile 28 immer mit der Fehlermeldung: &quot;Too few template-arguments-lists&quot; quittiert. Was mache ich hier falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739247</guid><dc:creator><![CDATA[Matzer]]></dc:creator><pubDate>Wed, 08 Jul 2009 15:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 15:26:50 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig sehe ist das in Zeile 28 eine vollständige Spezialisierung von A&lt;B&gt;::Instance. Evtl. wird der Fehler behoben wenn du ein template&lt;&gt; vor die Zeile schreibst.<br />
Dann wird allerdings das nächste problem auftauchen: sobald du B.hpp in mehr als eine Übersetzungseinheit einbindest, wird der Linker am Ende über eine &quot;multiple definition&quot; meckern. Die Definition gehört in eine .cpp<br />
Allgemein wirst du für alle anderen Instantiierungen von A aber dann noch den Fehler erhalten &quot;undefined reference to A&lt;C&gt;::Instance&quot; - weil du Instance eben nur für B definiert hast und für alle anderen möglichen Templateparameter nicht. Um das zu beheben könntest du einfach allgemein A&lt;T&gt;::Instance = NULL in A.hpp schreiben (hier in die hpp, weils ein Template und keine vollständige Spezialisierung ist). Die Spezialisierung für B kann dann entfallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739253</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 08 Jul 2009 15:26:50 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 15:47:19 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Dann wird allerdings das nächste problem auftauchen: sobald du B.hpp in mehr als eine Übersetzungseinheit einbindest, wird der Linker am Ende über eine &quot;multiple definition&quot; meckern. Die Definition gehört in eine .cpp</p>
</blockquote>
<p>B.hpp wird im Code nur einmal an einer zentralen Stelle eingebunden.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Allgemein wirst du für alle anderen Instantiierungen von A aber dann noch den Fehler erhalten &quot;undefined reference to A&lt;C&gt;::Instance&quot; - weil du Instance eben nur für B definiert hast und für alle anderen möglichen Templateparameter nicht</p>
</blockquote>
<p>Jede abgeleitete Klasse von A&lt;T&gt; entspricht einer betriebssystemspezifischen Implementierung eines globalen &quot;EventListeners&quot;.(ich schreibe momentan an einer kleinen GUI-Lib). Es gibt momentan nur zwei solcher Ableitungen: Einmal für Win32-Systeme und eine für Linux. Es ist also nicht geplant, noch weitere Instanttierungen vorzunehmen, solange es nicht notwendig ist.</p>
<p>Ich werde es erstmal mit vorangestelltem template&lt;&gt; verursachen und evt. dann noch die restlichen Punkte abarbeiten <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="😉"
    /> Vielen Dank für die schnelle Antwort</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739264</guid><dc:creator><![CDATA[Matzer]]></dc:creator><pubDate>Wed, 08 Jul 2009 15:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 15:57:07 GMT]]></title><description><![CDATA[<p>Wäre es nicht schöner, wenn es</p>
<pre><code class="language-cpp">static T* Instance;

   static T* getInstance(){
       if(!Instance){
          Instance = new T();
       }
       return Instance;
   }
</code></pre>
<p>heißen würde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739268</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 08 Jul 2009 15:57:07 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 16:01:25 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Wäre es nicht schöner, wenn ...</p>
</blockquote>
<p>Damit könntest du Recht haben <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="😉"
    /> Hab den Code entsprechend angepasst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739270</guid><dc:creator><![CDATA[Matzer]]></dc:creator><pubDate>Wed, 08 Jul 2009 16:01:25 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 22:04:35 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Allgemein wirst du für alle anderen Instantiierungen von A aber dann noch den Fehler erhalten &quot;undefined reference to A&lt;C&gt;::Instance&quot; - weil du Instance eben nur für B definiert hast und für alle anderen möglichen Templateparameter nicht. Um das zu beheben könntest du einfach allgemein A&lt;T&gt;::Instance = NULL in A.hpp schreiben (hier in die hpp, weils ein Template und keine vollständige Spezialisierung ist). Die Spezialisierung für B kann dann entfallen.</p>
</blockquote>
<p>Ich habe diesen Vorschlag nun ausprobiert, da er meiner Meinung nach die sinnvollste und sauberste Lösung darstellt:</p>
<pre><code class="language-cpp">// Datei A.hpp
template &lt;class T&gt;
class A{
private:
   static A&lt;T&gt;* Instance;

   // Ctor und Copy-Ctor
public:
   static A&lt;T&gt;* getInstance(){
       if(!Instance){
          Instance = new T();
          return Instance;
       }
       return Instance;
   }
protected:
   // Irgendwelche Schnittstellendefinitionen
};
A&lt;T&gt;::Instance = NULL;
</code></pre>
<p>Aber anschließend bekomme ich immer wieder die Fehlermeldung, dass &quot;T&quot; in diesem Gültigkeitsbereich nicht definiert wurde(mit Verweis auf die Zeile 19). Wie nehme ich nun die Initialisierung für Instance vor, ohne das Template spezialisieren zu müssen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739449</guid><dc:creator><![CDATA[Matzer]]></dc:creator><pubDate>Wed, 08 Jul 2009 22:04:35 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 22:40:21 GMT]]></title><description><![CDATA[<p>Wie wäre es mit:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
A&lt;T&gt;* A&lt;T&gt;::Instance = NULL;
</code></pre>
<p>Aber sag mal, bist du sicher, dass es eine <code>A&lt;T&gt;</code> Instanz sein soll und nicht gleich eine <code>T</code> Instanz?</p>
<p>Und wieso machst du dir das Leben nicht einfacher und machst sowas:</p>
<pre><code class="language-cpp">// Datei A.hpp
template &lt;class T&gt;
class A{
   // Ctor und Copy-Ctor
public:
   static A&lt;T&gt;* getInstance(){
       static A&lt;T&gt;* Instance = new T();
       return Instance;
   }
protected:
   // Irgendwelche Schnittstellendefinitionen
};
</code></pre>
<p>Falls das Objekt nicht zu gross ist, könntest du es sogar direkt bauen lassen und nicht über den Heap gehen:</p>
<pre><code class="language-cpp">static A&lt;T&gt;&amp; getInstance(){
   static T Instance;
   return Instance;
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739454</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Wed, 08 Jul 2009 22:40:21 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 23:35:57 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Wie wäre es mit:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
A&lt;T&gt;* A&lt;T&gt;::Instance = NULL;
</code></pre>
</blockquote>
<p>Jupp, funktioniert, danke. Und ich hatte mich tatsächlich die ganze Zeit gefragt, warum T undefiniert ist <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="😃"
    /><br />
Hier würde es tatsächlich auch reichen, nur eine Instanz vom Typ T zurückzugeben. Habs entsprechend geändert.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Und wieso machst du dir das Leben nicht einfacher und machst sowas:</p>
<pre><code class="language-cpp">// Datei A.hpp
template &lt;class T&gt;
class A{
   // Ctor und Copy-Ctor
public:
   static A&lt;T&gt;* getInstance(){
       static A&lt;T&gt;* Instance = new T();
       return Instance;
   }
protected:
   // Irgendwelche Schnittstellendefinitionen
};
</code></pre>
</blockquote>
<p>Hmm, wenn ich an dieser Stelle getInstance() zweimal aufrufe, was passiert dann mit dem ersten - auf dem Heap angelegten - T? Ich könnte dann doch theoretisch folgendes machen:</p>
<pre><code class="language-cpp">typedef A&lt;T&gt; Singleton;
static Singleton* foo = Singleton::getInstance();
static Singleton* bar = Singleton::getInstance();
// 2 verschiedene Instanzen von Singleton
</code></pre>
<p>Vielleicht ist es aber schon zu spät, und ich raffe es nicht <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/1739460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739460</guid><dc:creator><![CDATA[Matzer]]></dc:creator><pubDate>Wed, 08 Jul 2009 23:35:57 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 23:40:20 GMT]]></title><description><![CDATA[<p>Nein, statische Initialisierungen passieren nur einmal pro Programmdurchlauf.</p>
<p>Aber wieso auf dem Heap? Wer soll das dann freigeben? Ausserdem würde ich keinen Zeiger, sondern eine Referenz zurückgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739462</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 08 Jul 2009 23:40:20 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 23:50:37 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Nein, statische Initialisierungen passieren nur einmal pro Programmdurchlauf.</p>
</blockquote>
<p>Okay, ich war gerade in dem Glauben, dass eine <strong>neue</strong> statische Variable innerhalb der Funktion generiert wird, was sich jetzt nach mehrmaliger Überlegung natürlich als falsch herausstellt <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>
<p>Nexus schrieb:</p>
<blockquote>
<p>Aber wieso auf dem Heap? Wer soll das dann freigeben? Ausserdem würde ich keinen Zeiger, sondern eine Referenz zurückgeben.</p>
</blockquote>
<p>In meinem Quellcode versteckt sich noch eine kleine statische Memberfunktion destroy(), die den Speicher am Ende des Programms wieder freigibt. <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/1739464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739464</guid><dc:creator><![CDATA[Matzer]]></dc:creator><pubDate>Wed, 08 Jul 2009 23:50:37 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Wed, 08 Jul 2009 23:59:01 GMT]]></title><description><![CDATA[<p>Matzer schrieb:</p>
<blockquote>
<p>In meinem Quellcode versteckt sich noch eine kleine statische Memberfunktion destroy(), die den Speicher am Ende des Programms wieder freigibt. <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>
</blockquote>
<p>Sehr heikel, sowas geht extrem schnell vergessen. Gerade wenn das Programm frühzeitig beendet wird und das Projekt wächst. Wieso nicht direkt im statischen Speicherbereich arbeiten oder wenigstens den Zeiger kapseln?</p>
<p>Ach ja, Referenzen fände ich immer noch besser. <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="😉"
    /><br />
Hat es einen bestimmten Grund, wieso du Zeiger nimmst? Wenn du dauernd dereferenzierst, kann eine Referenz schöner sein. Aber ist auch ein wenig Geschmackssache... <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/1739466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739466</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 08 Jul 2009 23:59:01 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Thu, 09 Jul 2009 00:29:35 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Matzer schrieb:<br />
In meinem Quellcode versteckt sich noch eine kleine statische Memberfunktion destroy(), die den Speicher am Ende des Programms wieder freigibt. <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="😉"
    /><br />
Sehr heikel, sowas geht extrem schnell vergessen. Gerade wenn das Programm frühzeitig beendet wird und das Projekt wächst. Wieso nicht direkt im statischen Speicherbereich arbeiten oder wenigstens den Zeiger kapseln?</p>
</blockquote>
<p>Momentan schreibe ich an einer GUI-Lib und um boost::asio dazu zu überreden, einen asynchronen Aufruf zu meinem globalen EventHandler zu starten, muss am Ende jedes Programms ungefähr sowas stehen:</p>
<pre><code class="language-cpp">// irgendwo im Code
boost::asio::io_service MsgHandler;
//in main()
MsgHandler.run();
return 0;
</code></pre>
<p>Natürlich ist der Aufruf von run in irgendeiner Klasse gekapselt. Da aber run() am Ende des Programms sowieso ausgeführt werden muss, übernimmt die kapselnde Klasse anschließend auch die Aufräumarbeiten, sobald die globale MessageLoop durchlaufen ist. Vergessen wird es also erstmal nicht <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>
<p>Nexus schrieb:</p>
<blockquote>
<p>...oder wenigstens den Zeiger kapseln?</p>
</blockquote>
<p>kommt alles noch <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="🙂"
    /> Ich wollte es erstmal schaffen, auf Linux und Windows je ein Fenster zur Anzeige zu bringen (was mir vorhin auch gelungen ist muhaa). Deswegen wird in einigen Teilen des Codes noch mir rohen Zeigern rumhantiert. Ich wollte nur so schnell wie möglich zum Ziel. Das geht natürlich auf Kosten des Designs</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Ach ja, Referenzen fände ich immer noch besser. <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="😉"
    /><br />
Hat es einen bestimmten Grund, wieso du Zeiger nimmst? Wenn du dauernd dereferenzierst, kann eine Referenz schöner sein. Aber ist auch ein wenig Geschmackssache... <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>Der hartnäckigen Forderung nach einer Referenz werde ich natürlich nachkommen <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="😉"
    /> Ist an dieser Stelle wohl tatsächlich angebrachter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739470</guid><dc:creator><![CDATA[Matzer]]></dc:creator><pubDate>Thu, 09 Jul 2009 00:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to too few template-arguments-lists on Thu, 09 Jul 2009 09:51:17 GMT]]></title><description><![CDATA[<p>Würd dir empfehlen, dieses buch zu holen:</p>
<p><a href="http://www.amazon.com/Modern-Design-Programming-Patterns-Depth/dp/0201704315" rel="nofollow">http://www.amazon.com/Modern-Design-Programming-Patterns-Depth/dp/0201704315</a></p>
<p>Da gibt es ein größeres beispiel zu einer modernen gui lib, afaik. Falls es mal irgendwo hapert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1739573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739573</guid><dc:creator><![CDATA[e-book]]></dc:creator><pubDate>Thu, 09 Jul 2009 09:51:17 GMT</pubDate></item></channel></rss>