<?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[Duck Typing in C++ ?]]></title><description><![CDATA[<p>Hallo:</p>
<p>wäre es eigentlich --- rein theoretisch! --- möglich, C++ zu einer<br />
dynamisch getypten Sprache zu machen, also zu einer Sprache, in der man<br />
zur Compile-Zeit keinerlei Typangaben zu machen braucht ?</p>
<p>Ich stelle mir das so vor: Eine Klasse &quot;Object&quot;, von der *alle* anderen<br />
Klassen (inkl. Zahlen, Strings, Files,...) Unterklassen sind<br />
(soll heißen: alle Klassen sollen von der Klasse &quot;Object&quot; erben).<br />
Dann könnte man doch die Typangaben aller Funktionen und Methoden durch die Typangabe &quot;Object&quot; ersetzen, und könnte theoretisch jede Funktion mit jeder beliebigen Sorte von Objekt als Argumente aufrufen, da ja jede Klasse Unterklasse von &quot;Object&quot; wäre, also jedes Objekt zur Typangabe &quot;Object&quot; paßt.<br />
Der Compiler dürfte dann doch nie meckern.</p>
<p>Ob die Parameter dann zur Funktion passen oder nicht (d.h. ob die<br />
Objekte passende methoden anbieten, wie sie in der Funktion aufgerufen werden<br />
oder nicht), stellt sich dann erst zur Laufzeit heraus.<br />
Im Ergebnis entspräche das doch dem &quot;Duck Typing&quot;, wie es in Ruby und anderen<br />
dynamisch getypten Sprachen stattfindet: kein Typcheck zur Compilezeit.</p>
<p>Natürlich müßte man dann alle Libraries umschreiben, sodaß Zahlen und<br />
String und Files, Felder und Listen etc. alles Unterklassen von &quot;Object&quot; sind, aber davon mal abgesehen, und davon, ob der Aufwand vernünftig ist oder nicht:<br />
Ginge das prinzipiell ? Wäre dann C++ wie eine dynamisch getypte Sprache<br />
verwendbar ?</p>
<p>Beispiel:<br />
Object main(Object c, Object v) {<br />
cout &lt;&lt; &quot;Anzahl Argumente:&quot; &lt;&lt; c &lt;&lt; endl ;<br />
Object n ;<br />
n = 3 ;<br />
n := n * 2 ;<br />
cout &lt;&lt; &quot;2*3=&quot; &lt;&lt; n &lt;&lt; endl ;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152000/duck-typing-in-c</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 19:46:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152000.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Jul 2006 16:45:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Duck Typing in C++ ? on Sat, 01 Jul 2006 16:45:33 GMT]]></title><description><![CDATA[<p>Hallo:</p>
<p>wäre es eigentlich --- rein theoretisch! --- möglich, C++ zu einer<br />
dynamisch getypten Sprache zu machen, also zu einer Sprache, in der man<br />
zur Compile-Zeit keinerlei Typangaben zu machen braucht ?</p>
<p>Ich stelle mir das so vor: Eine Klasse &quot;Object&quot;, von der *alle* anderen<br />
Klassen (inkl. Zahlen, Strings, Files,...) Unterklassen sind<br />
(soll heißen: alle Klassen sollen von der Klasse &quot;Object&quot; erben).<br />
Dann könnte man doch die Typangaben aller Funktionen und Methoden durch die Typangabe &quot;Object&quot; ersetzen, und könnte theoretisch jede Funktion mit jeder beliebigen Sorte von Objekt als Argumente aufrufen, da ja jede Klasse Unterklasse von &quot;Object&quot; wäre, also jedes Objekt zur Typangabe &quot;Object&quot; paßt.<br />
Der Compiler dürfte dann doch nie meckern.</p>
<p>Ob die Parameter dann zur Funktion passen oder nicht (d.h. ob die<br />
Objekte passende methoden anbieten, wie sie in der Funktion aufgerufen werden<br />
oder nicht), stellt sich dann erst zur Laufzeit heraus.<br />
Im Ergebnis entspräche das doch dem &quot;Duck Typing&quot;, wie es in Ruby und anderen<br />
dynamisch getypten Sprachen stattfindet: kein Typcheck zur Compilezeit.</p>
<p>Natürlich müßte man dann alle Libraries umschreiben, sodaß Zahlen und<br />
String und Files, Felder und Listen etc. alles Unterklassen von &quot;Object&quot; sind, aber davon mal abgesehen, und davon, ob der Aufwand vernünftig ist oder nicht:<br />
Ginge das prinzipiell ? Wäre dann C++ wie eine dynamisch getypte Sprache<br />
verwendbar ?</p>
<p>Beispiel:<br />
Object main(Object c, Object v) {<br />
cout &lt;&lt; &quot;Anzahl Argumente:&quot; &lt;&lt; c &lt;&lt; endl ;<br />
Object n ;<br />
n = 3 ;<br />
n := n * 2 ;<br />
cout &lt;&lt; &quot;2*3=&quot; &lt;&lt; n &lt;&lt; endl ;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089664</guid><dc:creator><![CDATA[Hobbyprogrammierer]]></dc:creator><pubDate>Sat, 01 Jul 2006 16:45:33 GMT</pubDate></item><item><title><![CDATA[Reply to Duck Typing in C++ ? on Sat, 01 Jul 2006 17:10:57 GMT]]></title><description><![CDATA[<p>Wären alle Klasse Unterklassen einer globalen Klasse &quot;Object&quot;,<br />
dann könnte man, wenn man in der STL class Object als Template-Klasse benutzt, wohl auch so lockere Sachen schreiben wie:</p>
<p>vector&lt;Object&gt; v ;<br />
v.push_back(&quot;hallo&quot;);<br />
v.push_back(3);</p>
<p>also eine Liste aus Objekten verschiedener Art. Ganz ähnlich wie in Perl,Python,Smalltalk,Ruby und Co.<br />
Wäre doch vielleicht die Mühe des Umschreibens der Includes wert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089677</guid><dc:creator><![CDATA[Hobbyprogrammierer]]></dc:creator><pubDate>Sat, 01 Jul 2006 17:10:57 GMT</pubDate></item><item><title><![CDATA[Reply to Duck Typing in C++ ? on Sat, 01 Jul 2006 18:25:39 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>machbar wär das grundsätzlich schon, wie du schon selbst sagst über die Objektvererbung. Doch ich denke da werden auch einige der C (++) Besonderheiten dabei draufgehen, zum Beispiel eben genau die Typkontrolle. Außerdem vergißt du das die dynamsiche Typüberprüfung bzw. RTTI eben Laufzeit kostet.<br />
In C++ verwendet man dafür auch Templates, um eingeschränkte Typfreiheit zu bekommen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089732</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 01 Jul 2006 18:25:39 GMT</pubDate></item><item><title><![CDATA[Reply to Duck Typing in C++ ? on Sat, 01 Jul 2006 18:22:40 GMT]]></title><description><![CDATA[<p>Also wenn man das so umsetzen würde, hättest du aber ein dicken Haufen mehr Laufzeitfehler, da dann jede Methode, welche eigentlich nur für bestimmte Datentypen funktionieren, zur Laufzeit völlig falsch aufgerufen werden könnte.<br />
Denke es gibt noch 1000 weitere Gründe die dagegen sprechen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089733</guid><dc:creator><![CDATA[Tobias W]]></dc:creator><pubDate>Sat, 01 Jul 2006 18:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Duck Typing in C++ ? on Sat, 01 Jul 2006 20:18:44 GMT]]></title><description><![CDATA[<p>Hallo:</p>
<p>akari:</p>
<p>Die Typkontrolle geht weg, da hast Du vollkommen Recht - das ist dann eben das neue &quot;Feature&quot;, denn die (zur Compile-Zeit) fehlende Typkontrolle sorgt<br />
ja in den (im Augenblick sehr in Mode geratenen) dynamisch getypten Sprachen für den lockeren &quot;Rapid Prototyping&quot; - Programmierstil, bei dem man zur Compile-Zeit keine Typen angibt, was dem<br />
Programmierer einiges an Arbeit spart.<br />
Natürlich kann man dann unangenehme<br />
Überraschungen zur Laufzeit erleben, wenn eine Funktion auf ein Objekt angewandt<br />
werden soll, das die gefragte Methode nicht liefert. Es liegt dann am<br />
Programmierer, das Risiko zu begrenzen.</p>
<p>Tobias W:</p>
<p>Ich meine ja nicht, daß C++ immer so verwendet werden sollte wie beschrieben.<br />
Ich finde aber, daß man auf diese Weise eine Sprache hätte, bei der man<br />
bei Bedarf (wenn man auf Typsicherheit und Performance Wert legt)<br />
die Typen zur Compilezeit festlesgen kann, und wenn das nicht nötig<br />
ist (s. Rapid Prototyping) könnte man &quot;dynamisch&quot; typen und beide Formen<br />
mischen, sodaß performance-kritische Routinen statisch getypt werden und<br />
z.B. das GUI ohne Typangaben programmiert wird, was Programmierzeit spart<br />
und das Programm verkürzt.</p>
<p>Wenn das wirklich ginge, könnte man bei Bedarf C++ ähnlich wie<br />
Python oder Ruby benutzen, allerdings wohl nicht ganz genauso: bei<br />
der Verwendung von Funktionen oder Funktionszeigern als Argumente für<br />
Funktionen müßte man in C++ trotz &quot;class Object&quot; noch die Anzahl<br />
Argumente vor dem Aufruf festlegen, d.h. eine Funktion vom Typ Object f(Object, Object)<br />
wäre nicht übergebbar als Argument, wenn eine Funktion vom Typ Object f(Object) verlangt ist.<br />
Das ließe sich vermutlich nur lösen, wenn auch Funktionen in C++ Objekte<br />
wären, und das ist vermutlich schwieriger oder unmöglich zu machen, ohne<br />
die Sprachspezifikation zu ändern, denn letztendlich müßte man dann<br />
einen &quot;alles ist ein Objekt&quot;-Ansatz in C++ realisieren, und das scheint<br />
mir doch im Moment ein wenig &quot;Science-Fiction&quot; zu sein.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1089792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1089792</guid><dc:creator><![CDATA[Hobbyprogrammierer]]></dc:creator><pubDate>Sat, 01 Jul 2006 20:18:44 GMT</pubDate></item><item><title><![CDATA[Reply to Duck Typing in C++ ? on Sun, 02 Jul 2006 14:11:14 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>abgesehen von dem, was hier schon geschrieben wurde: C++ *hat* Duck Typing! Sonst würde folgender Code nicht funktionieren:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
void times_two(T&amp; x) { x *= 2; }
</code></pre>
<p>Es ist statisch, aber das macht es nicht weniger zu Duck Typing. Es geht halt nur für generische Typen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090148</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 02 Jul 2006 14:11:14 GMT</pubDate></item><item><title><![CDATA[Reply to Duck Typing in C++ ? on Sun, 02 Jul 2006 16:46:59 GMT]]></title><description><![CDATA[<p>Hallo:</p>
<p>Danke für den Hinweis!</p>
<p>Beste Grüße.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090244</guid><dc:creator><![CDATA[Hobbyprogrammierer]]></dc:creator><pubDate>Sun, 02 Jul 2006 16:46:59 GMT</pubDate></item></channel></rss>