2016-05-14 18 views
1

Beim Lesen der Dokumentation auf boost any und experimental any,
Ich habe keine Erwähnung von type erasure.Verwendet std :: any Typ Löschen, Sub-Typisierung oder Polymorphie?

Ich versuche, das Konzept von "Typ löschen" zu verstehen, wie es für C++ gilt.

Ist es richtig zu sagen, dass der Typ "any" beim Speichern seiner Werte "type löscht" verwendet?
Ist es richtig zu sagen, dass es "Polymorphismus" benutzt, wenn es seine Werte speichert?
Ist "Typ löschen" eine Art "Polymorphismus"?

Der wikipedia-Artikel auf polymorphism, erwähnt auch nicht "Art Löschung".
Es erwähnt "Subtyping". Ist "Typ-Löschung" eine Art "Subtyping"?

Es tut uns leid, wenn diese Frage in verschiedene Richtungen scheint.

Zusammengefasst

Wie "Typ Löschung", "polymorphsim" und "Subtypisierung" beziehen sich auf den jeden Typen in C++?

+1

Einige Informationen: 1) [2 Blog-Beiträge] (https://akrzemi1.wordpress.com/2013/11/18/type-erasure-part-i/); 2) [Stapel-Überlauf-Frage] (http://stackoverflow.com/questions/5450159/type-erasure-techniques) –

+0

Sie können vererbungsbasierten Polymorphismus als eine Technik zum Implementieren von Typ-Löschen verwenden. Sean Parent behandelt eine solche Technik in seinem Vortrag "Vererbung ist die Basisklasse des Bösen". Das soll nicht heißen, dass es die einzige Option ist. – chris

Antwort

0

Ist es korrekt zu sagen, dass der Typ "any" beim Speichern seiner Werte "type löschung" verwendet?

Vielleicht haben ich und andere Leute eine andere Definition von „Typ Löschung“, aber Typ Löschung mit any implementieren macht keinen Sinn für mich. Wenn wir die Definition "represent a variety of types through a single generic interface" verwenden, dann passen any, std::function, etc. die Rechnung. Die wikipedia Definition "sicherzustellen, dass die Laufzeitausführung eines Programms nicht von Typinformationen abhängt" macht im Kontext von C++ keinen Sinn. Generics (das archetypische Beispiel für Type Erasure) bedeutet nicht "Entfernen von Typen aus der Sprache". Außerdem verwendet std::any (optional) RTTI. Also würde ich anderswo suchen als Wikipedia.

Ist es korrekt zu sagen, dass es "Polymorphismus" benutzt, wenn es seine Werte speichert?

Polymorphismus ist eine Möglichkeit any zu implementieren. Es ist jedoch keineswegs erforderlich. Soweit ich das beurteilen kann, verwendet nur Boost Polymorphie. Siehe this answer.

boost

Andere Implementierungen zeigen, dass es nicht erforderlich ist:

libc++

libstdc++

Auch this sehen und die begleitende question

Ist "Typ-Löschung" eine Art "Polymorphismus"?

Nein. Halten Sie Vorlagen, Generika und std::function für alle für einen Polymorphismus?

+0

Im Kontext von C++ hat "Typ löschen" eine andere Bedeutung als das, was Sie aus Wikipedia zitieren. Siehe https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Type_Erasure zum Beispiel. – interjay

+0

@interjay Das Zitat, das ich verwendete, ist von dieser Seite tatsächlich. Der Wikipedia-Link stammt aus der OP-Frage. – user6335390

+0

OK, dann ist der Link von OP für C++ nicht relevant. Die Implementierung von Boost verwendet übrigens (dynamischen) Polymorphismus. Suchen Sie einfach nach "virtuell". Und soweit ich sehen kann, erfordert keine der Implementierungen RTTI, außer die 'type()' Funktion zu implementieren. – interjay