<?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[Parsen von nested structs mit Boost Spirit]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade eine etwas kompliziertere Textdatei zu parsen. Ich habe gesehen, dass Boost bereits einen Parser hat, den ich dann auch gleich benutzen wollte.</p>
<p>Ich muss gleich vorweg schicken, dass ich ein kompletter Neuling im Bereich Boost Spirit und Boost Fusion bin, was die Sache nicht unbedingt einfacher macht. Ich habe bisher immer andere Module benutzt.</p>
<p>Ok, hier das Problem: Ich versuche folgende Datei zu parsen:</p>
<pre><code>class HkmTree Format: v2.1
#nodes:  9
#leaves: 8

&lt;HkmParams 
	branchFactor:                8
	maxTreeDepth:                1
	desiredNumSamplesPerCluster: 15000000
	minNumSamplesPerCluster:     15000000
	numClusteringRuns:           1
	standardization:             0
	meanSubtraction:             0
	noInternalLeafStats:         0
	termCrit.maxCount:           1000
	termCrit.epsilon:            1e-006
	termCrit.type:               3
&gt;
</code></pre>
<p>Das ist nicht die vollständige Datei. Ich versuche mich nur schrittweise an das Problem heranzutasten. Ich versuche erst einmal Teilgrammatiken an Teilen der Datei auszuprobieren bevor ich dann alles zusammenbaue.</p>
<p>Die geparsten Daten sollen dann am Ende in einem struct stehen. Hier sind die structs die bisher existieren:</p>
<pre><code>struct HkmHeader {
	std::string version;
	int numNodes;
	int numLeaves;
};

struct HkmParams {
	int branchFactor;
	int maxTreeDepth;
	int desiredNumSamplesPerCluster;
	int numClusteringRuns;
	int standardization;
	int meanSubtraction;
	int noInternalLeafStats;
	int termCritMaxCount;
	float termCritEpsilon;
	int termCritType;
};

struct HkmFile {
	HkmHeader header;
	HkmParams params;
};

BOOST_FUSION_ADAPT_STRUCT(
	HkmHeader,
	(std::string, version)
	(int, numNodes)
	(int, numLeaves)
)

BOOST_FUSION_ADAPT_STRUCT(
	HkmParams,
	(int, branchFactor)
	(int, maxTreeDepth)
	(int, desiredNumSamplesPerCluster)
	(int, numClusteringRuns)
	(int, standardization)
	(int, meanSubtraction)
	(int, noInternalLeafStats)
	(int, termCritMaxCount)
	(float, termCritEpsilon)
	(int, termCritType)
)

BOOST_FUSION_ADAPT_STRUCT(
	HkmFile,
	(HkmHeader, header)
	(HkmParams, params)
)
</code></pre>
<p>Die Grammatik ist folgendermaßen implementiert:</p>
<pre><code>template&lt;typename Iterator, typename Skipper&gt;
struct HkmGrammar
	: qi::grammar&lt;Iterator, HkmFile(), Skipper&gt;
{
	qi::rule&lt;Iterator, HkmFile(), Skipper&gt; start;
	qi::rule&lt;Iterator, HkmHeader(), Skipper&gt; hkmHeader;
	qi::rule&lt;Iterator, HkmParams(), Skipper&gt; hkmParams;

	qi::rule&lt;Iterator, std::string(), Skipper&gt; charstr;

	HkmGrammar()
		: HkmGrammar::base_type(start)
	{
		charstr = +qi::char_;

		hkmHeader = qi::lit(&quot;class&quot;) &gt;&gt; qi::lit(&quot;HkmTree&quot;) &gt;&gt; qi::lit(&quot;Format:&quot;) &gt;&gt; charstr ;
		hkmParams = qi::lit(&quot;&lt;HkmParams&quot;) &gt;&gt; 
			qi::lit(&quot;branchFactor:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;maxTreeDepth:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;desiredNumSamplesPerCluster:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;minNumSamplesPerCluster:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;numClusteringRuns:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;standardization:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;meanSubtraction:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;noInternalLeafStates&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;termCrit.maxCount&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;termCrit.epsilon&quot;) &gt;&gt; qi::float_ &gt;&gt;
			qi::lit(&quot;termCrit.type&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;&gt;&quot;);
		start = hkmHeader &gt;&gt; hkmParams;
	}
};
</code></pre>
<p>Ich habe das Programm zunächst einmal nur mit der Regel &quot;hkmHeader&quot; kompiliert. Da funktioniert alles einwandfrei. Das struct HkmHeader wird korrekt befüllt. Jetzt habe ich die Regel &quot;hkmParams&quot; als erste Erweiterung eingebaut und ich bekomme seltsame Fehlermeldungen vom Compiler:</p>
<pre><code>Fehler	1	error C2903: &quot;apply&quot;: Symbol ist weder eine Klassen-template noch eine Funktions-template.	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	25
Fehler	2	error C2027: Verwendung des undefinierten Typs &quot;boost::fusion::detail::as_vector&lt;size&gt;&quot;	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	25
Fehler	3	error C2143: Syntaxfehler: Es fehlt ';' vor '&lt;'	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	25
Fehler	4	error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	25
Fehler	5	error C2039: 'type': Ist kein Element von '`global namespace''	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	25
Fehler	6	error C2238: Unerwartete(s) Token vor ';'	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	26
Fehler	7	error C2039: 'type': Ist kein Element von 'boost::mpl::eval_if&lt;C,F1,F2&gt;'	C:\Libs2012\boost_1_53_0\boost\spirit\home\support\attributes.hpp	736
Fehler	8	error C3203: &quot;type&quot;: Die nicht spezialisierte template-Klasse kann nicht als template-Argument für den template-Parameter &quot;T&quot; verwendet werden, ein realer Typ wurde erwartet.	C:\Libs2012\boost_1_53_0\boost\spirit\home\qi\operator\sequence_base.hpp	59
Fehler	9	error C2955: &quot;boost::type&quot;: Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.	C:\Libs2012\boost_1_53_0\boost\spirit\home\qi\operator\sequence_base.hpp	59
Fehler	10	error C2955: &quot;boost::spirit::traits::strip_single_element_vector&quot;: Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.	C:\Libs2012\boost_1_53_0\boost\spirit\home\qi\operator\sequence_base.hpp	59
Fehler	11	error C3203: &quot;type&quot;: Die nicht spezialisierte template-Klasse kann nicht als template-Argument für den template-Parameter &quot;T&quot; verwendet werden, ein realer Typ wurde erwartet.	C:\Libs2012\boost_1_53_0\boost\spirit\home\qi\operator\sequence_base.hpp	81
Fehler	12	error C2955: &quot;boost::type&quot;: Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.	C:\Libs2012\boost_1_53_0\boost\spirit\home\qi\operator\sequence_base.hpp	81
</code></pre>
<p>Meine (zugegebenerweise nicht wirklich vertrauenswürdige) Intuition sagt mir, dass es irgendein Problem bei den nested Structs gibt. Kann das jemand bestätigen und evtl. vielleicht einen Lösungsvorschlag machen?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/316313/parsen-von-nested-structs-mit-boost-spirit</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 03:39:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316313.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Apr 2013 07:42:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Parsen von nested structs mit Boost Spirit on Mon, 29 Apr 2013 07:42:25 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade eine etwas kompliziertere Textdatei zu parsen. Ich habe gesehen, dass Boost bereits einen Parser hat, den ich dann auch gleich benutzen wollte.</p>
<p>Ich muss gleich vorweg schicken, dass ich ein kompletter Neuling im Bereich Boost Spirit und Boost Fusion bin, was die Sache nicht unbedingt einfacher macht. Ich habe bisher immer andere Module benutzt.</p>
<p>Ok, hier das Problem: Ich versuche folgende Datei zu parsen:</p>
<pre><code>class HkmTree Format: v2.1
#nodes:  9
#leaves: 8

&lt;HkmParams 
	branchFactor:                8
	maxTreeDepth:                1
	desiredNumSamplesPerCluster: 15000000
	minNumSamplesPerCluster:     15000000
	numClusteringRuns:           1
	standardization:             0
	meanSubtraction:             0
	noInternalLeafStats:         0
	termCrit.maxCount:           1000
	termCrit.epsilon:            1e-006
	termCrit.type:               3
&gt;
</code></pre>
<p>Das ist nicht die vollständige Datei. Ich versuche mich nur schrittweise an das Problem heranzutasten. Ich versuche erst einmal Teilgrammatiken an Teilen der Datei auszuprobieren bevor ich dann alles zusammenbaue.</p>
<p>Die geparsten Daten sollen dann am Ende in einem struct stehen. Hier sind die structs die bisher existieren:</p>
<pre><code>struct HkmHeader {
	std::string version;
	int numNodes;
	int numLeaves;
};

struct HkmParams {
	int branchFactor;
	int maxTreeDepth;
	int desiredNumSamplesPerCluster;
	int numClusteringRuns;
	int standardization;
	int meanSubtraction;
	int noInternalLeafStats;
	int termCritMaxCount;
	float termCritEpsilon;
	int termCritType;
};

struct HkmFile {
	HkmHeader header;
	HkmParams params;
};

BOOST_FUSION_ADAPT_STRUCT(
	HkmHeader,
	(std::string, version)
	(int, numNodes)
	(int, numLeaves)
)

BOOST_FUSION_ADAPT_STRUCT(
	HkmParams,
	(int, branchFactor)
	(int, maxTreeDepth)
	(int, desiredNumSamplesPerCluster)
	(int, numClusteringRuns)
	(int, standardization)
	(int, meanSubtraction)
	(int, noInternalLeafStats)
	(int, termCritMaxCount)
	(float, termCritEpsilon)
	(int, termCritType)
)

BOOST_FUSION_ADAPT_STRUCT(
	HkmFile,
	(HkmHeader, header)
	(HkmParams, params)
)
</code></pre>
<p>Die Grammatik ist folgendermaßen implementiert:</p>
<pre><code>template&lt;typename Iterator, typename Skipper&gt;
struct HkmGrammar
	: qi::grammar&lt;Iterator, HkmFile(), Skipper&gt;
{
	qi::rule&lt;Iterator, HkmFile(), Skipper&gt; start;
	qi::rule&lt;Iterator, HkmHeader(), Skipper&gt; hkmHeader;
	qi::rule&lt;Iterator, HkmParams(), Skipper&gt; hkmParams;

	qi::rule&lt;Iterator, std::string(), Skipper&gt; charstr;

	HkmGrammar()
		: HkmGrammar::base_type(start)
	{
		charstr = +qi::char_;

		hkmHeader = qi::lit(&quot;class&quot;) &gt;&gt; qi::lit(&quot;HkmTree&quot;) &gt;&gt; qi::lit(&quot;Format:&quot;) &gt;&gt; charstr ;
		hkmParams = qi::lit(&quot;&lt;HkmParams&quot;) &gt;&gt; 
			qi::lit(&quot;branchFactor:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;maxTreeDepth:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;desiredNumSamplesPerCluster:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;minNumSamplesPerCluster:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;numClusteringRuns:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;standardization:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;meanSubtraction:&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;noInternalLeafStates&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;termCrit.maxCount&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;termCrit.epsilon&quot;) &gt;&gt; qi::float_ &gt;&gt;
			qi::lit(&quot;termCrit.type&quot;) &gt;&gt; qi::int_ &gt;&gt;
			qi::lit(&quot;&gt;&quot;);
		start = hkmHeader &gt;&gt; hkmParams;
	}
};
</code></pre>
<p>Ich habe das Programm zunächst einmal nur mit der Regel &quot;hkmHeader&quot; kompiliert. Da funktioniert alles einwandfrei. Das struct HkmHeader wird korrekt befüllt. Jetzt habe ich die Regel &quot;hkmParams&quot; als erste Erweiterung eingebaut und ich bekomme seltsame Fehlermeldungen vom Compiler:</p>
<pre><code>Fehler	1	error C2903: &quot;apply&quot;: Symbol ist weder eine Klassen-template noch eine Funktions-template.	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	25
Fehler	2	error C2027: Verwendung des undefinierten Typs &quot;boost::fusion::detail::as_vector&lt;size&gt;&quot;	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	25
Fehler	3	error C2143: Syntaxfehler: Es fehlt ';' vor '&lt;'	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	25
Fehler	4	error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	25
Fehler	5	error C2039: 'type': Ist kein Element von '`global namespace''	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	25
Fehler	6	error C2238: Unerwartete(s) Token vor ';'	C:\Libs2012\boost_1_53_0\boost\fusion\container\vector\convert.hpp	26
Fehler	7	error C2039: 'type': Ist kein Element von 'boost::mpl::eval_if&lt;C,F1,F2&gt;'	C:\Libs2012\boost_1_53_0\boost\spirit\home\support\attributes.hpp	736
Fehler	8	error C3203: &quot;type&quot;: Die nicht spezialisierte template-Klasse kann nicht als template-Argument für den template-Parameter &quot;T&quot; verwendet werden, ein realer Typ wurde erwartet.	C:\Libs2012\boost_1_53_0\boost\spirit\home\qi\operator\sequence_base.hpp	59
Fehler	9	error C2955: &quot;boost::type&quot;: Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.	C:\Libs2012\boost_1_53_0\boost\spirit\home\qi\operator\sequence_base.hpp	59
Fehler	10	error C2955: &quot;boost::spirit::traits::strip_single_element_vector&quot;: Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.	C:\Libs2012\boost_1_53_0\boost\spirit\home\qi\operator\sequence_base.hpp	59
Fehler	11	error C3203: &quot;type&quot;: Die nicht spezialisierte template-Klasse kann nicht als template-Argument für den template-Parameter &quot;T&quot; verwendet werden, ein realer Typ wurde erwartet.	C:\Libs2012\boost_1_53_0\boost\spirit\home\qi\operator\sequence_base.hpp	81
Fehler	12	error C2955: &quot;boost::type&quot;: Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.	C:\Libs2012\boost_1_53_0\boost\spirit\home\qi\operator\sequence_base.hpp	81
</code></pre>
<p>Meine (zugegebenerweise nicht wirklich vertrauenswürdige) Intuition sagt mir, dass es irgendein Problem bei den nested Structs gibt. Kann das jemand bestätigen und evtl. vielleicht einen Lösungsvorschlag machen?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319556</guid><dc:creator><![CDATA[Compuholic]]></dc:creator><pubDate>Mon, 29 Apr 2013 07:42:25 GMT</pubDate></item><item><title><![CDATA[Reply to Parsen von nested structs mit Boost Spirit on Mon, 29 Apr 2013 08:43:44 GMT]]></title><description><![CDATA[<p>Compuholic schrieb:</p>
<blockquote>
<p>ich versuche gerade eine etwas kompliziertere Textdatei zu parsen.</p>
</blockquote>
<p>So kompliziert ist die auch wieder nicht, hier die Version mit dem normalen istream:</p>
<pre><code class="language-cpp">std::istream&amp; operator&gt;&gt;(std::istream&amp; in, HkmHeader&amp; f)
{
  return in &gt;&gt; lit(&quot;class HkmTree Format:&quot;) &gt;&gt; f.version
            &gt;&gt; lit(&quot;#nodes:&quot;) &gt;&gt; f.numNodes
            &gt;&gt; lit(&quot;#leaves:&quot;) &gt;&gt; f.numLeaves;
}

std::istream&amp; operator&gt;&gt;(std::istream&amp; in, HkmParams&amp; f)
{
  int dummy;
  return in &gt;&gt; lit(&quot;&lt;HkmParams&quot;)
            &gt;&gt; lit(&quot;branchFactor:&quot;) &gt;&gt;                f.branchFactor
            &gt;&gt; lit(&quot;maxTreeDepth:&quot;) &gt;&gt;                f.maxTreeDepth 
            &gt;&gt; lit(&quot;desiredNumSamplesPerCluster:&quot;) &gt;&gt; f.desiredNumSamplesPerCluster 
            &gt;&gt; lit(&quot;minNumSamplesPerCluster:&quot;) &gt;&gt;     dummy 
            &gt;&gt; lit(&quot;numClusteringRuns:&quot;) &gt;&gt;           f.numClusteringRuns
            &gt;&gt; lit(&quot;standardization:&quot;) &gt;&gt;             f.standardization
            &gt;&gt; lit(&quot;meanSubtraction:&quot;) &gt;&gt;             f.meanSubtraction
            &gt;&gt; lit(&quot;noInternalLeafStats:&quot;) &gt;&gt;         f.noInternalLeafStats
            &gt;&gt; lit(&quot;termCrit.maxCount:&quot;) &gt;&gt;           f.termCritMaxCount
            &gt;&gt; lit(&quot;termCrit.epsilon:&quot;) &gt;&gt;            f.termCritEpsilon
            &gt;&gt; lit(&quot;termCrit.type:&quot;) &gt;&gt;               f.termCritType
            &gt;&gt; lit(&quot;&gt;&quot;);
}

std::istream&amp; operator&gt;&gt;(std::istream&amp; in, HkmFile&amp; f)
{
  return in &gt;&gt; f.header &gt;&gt; f.params;
}
</code></pre>
<p>Alles was du brauchst, ist die Klasse lit:</p>
<pre><code class="language-cpp">struct lit {
  const char *str;
  lit(const char *str) : str(str) {}
};
std::istream&amp; operator&gt;&gt;(std::istream&amp; in, lit l)
{
  char c; in &gt;&gt; c;
  while (in &amp;&amp; *l.str) {
    if (*l.str != c) in.setstate(std::ios_base::failbit);
    if (isspace(*++l.str))
      in &gt;&gt; c, l.str++;
    else
      c = in.get();
  }
  return in;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2319569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319569</guid><dc:creator><![CDATA[lit]]></dc:creator><pubDate>Mon, 29 Apr 2013 08:43:44 GMT</pubDate></item><item><title><![CDATA[Reply to Parsen von nested structs mit Boost Spirit on Mon, 29 Apr 2013 08:46:12 GMT]]></title><description><![CDATA[<p>Vollständiges Beispiel: <a href="http://ideone.com/7f7mEH" rel="nofollow">http://ideone.com/7f7mEH</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319571</guid><dc:creator><![CDATA[lit]]></dc:creator><pubDate>Mon, 29 Apr 2013 08:46:12 GMT</pubDate></item><item><title><![CDATA[Reply to Parsen von nested structs mit Boost Spirit on Mon, 29 Apr 2013 08:48:19 GMT]]></title><description><![CDATA[<p>Du versuchst in der Regel eine Zahl mehr zu parsen, als im Struct enthalten ist. minNumSamplesPerCluster fehlt in HkmHeader. Das wird dazu führen, dass fusion_foo_type&lt;HkmHeader, 10&gt;::apply (ich bin jetzt aus dem Stand nicht sicher, wie Fusion die Typvorlage nennt, die es da benutzt, aber etwas in der Art ist das) noch definiert ist, fusion_foo_type&lt;HkmHeader, 11&gt;::apply aber nicht mehr (weil fusion_foo_type&lt;HkmHeader, 11&gt; keine Spezialisierung mehr hat).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319572</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Mon, 29 Apr 2013 08:48:19 GMT</pubDate></item><item><title><![CDATA[Reply to Parsen von nested structs mit Boost Spirit on Mon, 29 Apr 2013 09:06:32 GMT]]></title><description><![CDATA[<p>@seldon:</p>
<p>Danke, das Du mich darauf aufmerksam gemacht hast. Ich habe das entsprechende Feld im struct und dem Boost-Makro hinzugefügt. Leider lag es wohl nicht daran. Der Fehler besteht weiterhin unverändert.</p>
<p>@lit:<br />
Danke für Deine Anwort. Leider hilft mir das wenig. Wie gesagt: Der Datei-Ausschnitt den ich gepostet habe, ist nur ein kleiner Teil der zu parsenden Datei. Und da die Datei später Baumstrukturen und XML-ähnliche Attribut-Wert Paare (die zum Teil auch noch optional sein können) enthält, wird es extrem umschön das mit ad-Hoc Lösungen zu machen. Deshalb versuche ich das ja auch mit einem echten Parser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2319578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319578</guid><dc:creator><![CDATA[Compuholic]]></dc:creator><pubDate>Mon, 29 Apr 2013 09:06:32 GMT</pubDate></item></channel></rss>