<?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[Dynamic cast durch CRTP ersetzbar?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin dabei benutzerdefinierte Manipulatoren fuer meine eigene Klassen zu schreiben (sich an Stroustrup 21.4.6.3 orientierend). Ich habe zwei Klassentemplates auf deren Grundlage ich dann die eigentlichen Manipulatoren definiere:</p>
<pre><code class="language-cpp">template&lt;class T, class M&gt; class Base_Manip
{
public:
	virtual void dummy() {}
	Bound_Base_Manip&lt;T, M&gt; operator()(const T* n) const { return Bound_Base_Manip&lt;T, M&gt;(*(dynamic_cast&lt;const M*&gt;(this)), n); }   // ?????
};

template&lt;class T, class M&gt; class Bound_Base_Manip
{
private:
	const M&amp; m_manip;
	const T* m_data;
public:
	Bound_Base_Manip(const M&amp; bm, const T* t) : m_manip(bm), m_data(t) { }
	const M&amp; manip() const { return m_manip; }
	const T* data() const { return m_data; }
};
</code></pre>
<p>Ein Manipulator sieht dann z.B. so aus (Rev_Nd ist eine meiner Klassen):</p>
<pre><code class="language-cpp">class Rev_Nd_Manip : public Base_Manip&lt;Rev_Nd, Rev_Nd_Manip&gt;
{
	friend ostream&amp; operator&lt;&lt;(ostream&amp; s, const Bound_Base_Manip&lt;Rev_Nd, Rev_Nd_Manip&gt;&amp; bm);
private:
	int m_level;
public:
	explicit Rev_Nd_Manip(int level) : m_level(level) { }
	int level() const { return m_level; }
};
</code></pre>
<p>Das Ganze funktioniert so, aber ich frage mich, ob man die mit '?????' gekennzeichnete Zeile mittels CRTP (oder einem anderen Konstrukt) umschreiben kann (und sollte)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240493/dynamic-cast-durch-crtp-ersetzbar</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 00:03:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240493.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 May 2009 09:26:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamic cast durch CRTP ersetzbar? on Thu, 07 May 2009 09:26:25 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin dabei benutzerdefinierte Manipulatoren fuer meine eigene Klassen zu schreiben (sich an Stroustrup 21.4.6.3 orientierend). Ich habe zwei Klassentemplates auf deren Grundlage ich dann die eigentlichen Manipulatoren definiere:</p>
<pre><code class="language-cpp">template&lt;class T, class M&gt; class Base_Manip
{
public:
	virtual void dummy() {}
	Bound_Base_Manip&lt;T, M&gt; operator()(const T* n) const { return Bound_Base_Manip&lt;T, M&gt;(*(dynamic_cast&lt;const M*&gt;(this)), n); }   // ?????
};

template&lt;class T, class M&gt; class Bound_Base_Manip
{
private:
	const M&amp; m_manip;
	const T* m_data;
public:
	Bound_Base_Manip(const M&amp; bm, const T* t) : m_manip(bm), m_data(t) { }
	const M&amp; manip() const { return m_manip; }
	const T* data() const { return m_data; }
};
</code></pre>
<p>Ein Manipulator sieht dann z.B. so aus (Rev_Nd ist eine meiner Klassen):</p>
<pre><code class="language-cpp">class Rev_Nd_Manip : public Base_Manip&lt;Rev_Nd, Rev_Nd_Manip&gt;
{
	friend ostream&amp; operator&lt;&lt;(ostream&amp; s, const Bound_Base_Manip&lt;Rev_Nd, Rev_Nd_Manip&gt;&amp; bm);
private:
	int m_level;
public:
	explicit Rev_Nd_Manip(int level) : m_level(level) { }
	int level() const { return m_level; }
};
</code></pre>
<p>Das Ganze funktioniert so, aber ich frage mich, ob man die mit '?????' gekennzeichnete Zeile mittels CRTP (oder einem anderen Konstrukt) umschreiben kann (und sollte)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706968</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Thu, 07 May 2009 09:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamic cast durch CRTP ersetzbar? on Thu, 07 May 2009 10:25:57 GMT]]></title><description><![CDATA[<p>Du könntest einfach <code>static_cast&lt;&gt;</code> anstelle von <code>dynamic_cast&lt;&gt;</code> benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707014</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Thu, 07 May 2009 10:25:57 GMT</pubDate></item></channel></rss>