<?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[Prüfen, ob Klasse einen Operator unterstützt]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite an einer Funktion, die als Parameter per Template einen (Zeiger auf eine) beliebige Klasse übergeben bekommt. Auf dieser wird mit Iterator-ähnlichen Operatoren gearbeitet. Da ich aber nicht weiß, welche Operatoren von der Klasse unterstützt werden (z.B. []), will ich das überprüfen. Für jeden Vorschlag, wie ich so etwas machen könnte, wäre ich dankbar; bis jetzt habe ich zu dieser Frage nichts gefunden (ev. fehlt mir der richtige Suchbegriff?!)</p>
<p>Gesucht ist folgendes:</p>
<p>func(T* x)<br />
{<br />
wenn (x unterstützt []-Operator) { wahlfreier Zugriff auf x }<br />
sonst { sequentieller Zugriff auf x }<br />
}</p>
<p>Danke!<br />
Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/145126/prüfen-ob-klasse-einen-operator-unterstützt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 03:10:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/145126.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 25 Apr 2006 09:12:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Prüfen, ob Klasse einen Operator unterstützt on Tue, 25 Apr 2006 09:12:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite an einer Funktion, die als Parameter per Template einen (Zeiger auf eine) beliebige Klasse übergeben bekommt. Auf dieser wird mit Iterator-ähnlichen Operatoren gearbeitet. Da ich aber nicht weiß, welche Operatoren von der Klasse unterstützt werden (z.B. []), will ich das überprüfen. Für jeden Vorschlag, wie ich so etwas machen könnte, wäre ich dankbar; bis jetzt habe ich zu dieser Frage nichts gefunden (ev. fehlt mir der richtige Suchbegriff?!)</p>
<p>Gesucht ist folgendes:</p>
<p>func(T* x)<br />
{<br />
wenn (x unterstützt []-Operator) { wahlfreier Zugriff auf x }<br />
sonst { sequentieller Zugriff auf x }<br />
}</p>
<p>Danke!<br />
Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044658</guid><dc:creator><![CDATA[JJJ]]></dc:creator><pubDate>Tue, 25 Apr 2006 09:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen, ob Klasse einen Operator unterstützt on Tue, 25 Apr 2006 09:17:59 GMT]]></title><description><![CDATA[<p>Du kannst das nicht überprüfen. Du kannst nur versuchen, den Operator einzusetzen - wenn's nicht klappt, beschwert sich der Compiler.</p>
<p>Deswegen verwendet die STL auch Kategorie-Tags, um die &quot;Fähigkeiten&quot; eines Iterators einzustufen:</p>
<pre><code class="language-cpp">template&lt;typename It&gt;
void op(It p)
{
  op2(p,iterator_traits&lt;It&gt;::category());
}

template&lt;typename RIt&gt;
void op2(RIt p,random_access_iterator_tag)
{
  //nutzt volle Bandbreite der Zugriffsmöglichkeiten: +, -, [],...
}
template&lt;typename IIt&gt;
void op2(IIt p,input_iterator_tag)
{
  //ersetzt die Operatoren durch advance()- und distance()-Aufrufe
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1044667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044667</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 25 Apr 2006 09:17:59 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen, ob Klasse einen Operator unterstützt on Tue, 25 Apr 2006 10:25:54 GMT]]></title><description><![CDATA[<p>Die Iterator-Traits kannte ich schon, aber dein Beispiel hilft mir auf jeden Fall bei der Implementierung.<br />
Der Stroustrup sagt allerdings, dass alles was sich wie ein Iterator verhält, auch ein Iterator ist. Ich bin also nicht gezwungen, meinen eigenen Iterator in die Iterator-Hierachie einzubinden, solange ich die Operationen *, ++, == und ggf. [] unterstütze, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044718</guid><dc:creator><![CDATA[JJJ]]></dc:creator><pubDate>Tue, 25 Apr 2006 10:25:54 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen, ob Klasse einen Operator unterstützt on Tue, 25 Apr 2006 10:33:13 GMT]]></title><description><![CDATA[<p>Du mußt nicht, aber du kannst - und solange du eine Minimalvariante deines Algorithmus anbietest, dürften auch unbekannte Iterator-Typen verarbeitet werden können (allerdings mit etwas schlechterer Performance).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1044723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1044723</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 25 Apr 2006 10:33:13 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen, ob Klasse einen Operator unterstützt on Wed, 26 Apr 2006 17:59:07 GMT]]></title><description><![CDATA[<p>Ich habe jetzt einmal die Implementierung über die iterator_traits versucht, aber ich kann folgenden Code nicht mit dem GNU-Complier übersetzen, wärend Visual Studio 2003 ihn problemlos schluckt. Habe ich etwas falsch gemacht?</p>
<p>Die Fehlermeldung verstehe ich auch nicht ganz:</p>
<blockquote>
<p>12: dependant-name 'std::iterator_traits&lt;_Iterator&gt;::iterator_category' is parsed as a non-type, but instantiation yields a type</p>
</blockquote>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;vector&gt;
#include&lt;iterator&gt;

using namespace std;

// iterator traits and polymorphic functions

template&lt;typename It&gt;
void it1(It i)
{
	it1_help(i, iterator_traits&lt;It&gt;::iterator_category());
}

template&lt;typename ItRA&gt;
void it1_help(ItRA i, random_access_iterator_tag)
{
	cout &lt;&lt; &quot;random access&quot;;
}

template&lt;typename ItSA&gt;
void it1_help(ItSA i, input_iterator_tag)
{
	cout &lt;&lt; &quot;sequential access&quot;;
}

int main()
{
	vector&lt;int&gt; v(10);
	vector&lt;int&gt;::iterator itr_v = v.begin();

	it1(itr_v);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1045898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1045898</guid><dc:creator><![CDATA[JJJ]]></dc:creator><pubDate>Wed, 26 Apr 2006 17:59:07 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen, ob Klasse einen Operator unterstützt on Wed, 26 Apr 2006 18:08:46 GMT]]></title><description><![CDATA[<p>Hat sich erledigt, es fehlte ein &quot;typename&quot; vor dem iterator_category-Ausdruck. Fragt sich nur, warum Stroustrup und VStudio ohne auskommen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1045906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1045906</guid><dc:creator><![CDATA[JJJ]]></dc:creator><pubDate>Wed, 26 Apr 2006 18:08:46 GMT</pubDate></item></channel></rss>