Compile-time-reflection in C++1z?
Gibt es eine Arbeitsgruppe in der C++ Standardisierung Ausschuss für compile-time-reflection in C++1z oder nach. Ich würde gerne wissen, was genau ist der Zweck und wie stark die zu erwartenden Werkzeuge werden?
Beispielsweise wird es möglich sein, Namen von Funktionen oder Klassen, die die Verwendung dieser tools?
struct A {int f() {return 42;}};
struct B {int (std::reflect<A>::member<0>::declname)() {return 43;}};
//equivalent to struct B {int f() {return 43;}};
Wenn würde es nicht so stark wie diese, welche die typischen use-cases werden?
- Es ist noch in sehr frühen Stadien. Das beste, was Sie tun können, ist schauen Sie, was die Menschen vorschlagen.
- Ich habe schon geschaut, aber da weiß ich nicht, die "Geschichte" der study group, ich bin nicht sicher, zu verstehen, was "Ihre ultimative Traum"...
- Ich glaube nicht, dass Sie wissen, dass Sie noch entweder.
- Dies wird sehr hilfreich sein bei der Serialisierung. Ein weiterer Anwendungsfall ist ein property-editor, der erlaubt dem Benutzer das Bearbeiten der Eigenschaften von Objekten. Diese Reflexion Ding wäre für mich sehr nützlich in vielen Fällen!
- Jemand abgestimmt, diese Frage... wtf! Es kann nicht alles hinzufügen, was in der Kodierung, aber ich sicher wie die Hölle nicht neues über den Zugriff auf eine enumerator_list von einem static_assert in der Kompilierung. Dies ist ein großartiges feature. Die Zukunft sieht rosig aus
- Wer interessiert ist, kann wollen, um untersuchen Sie das Geschreibsel in der SG7 Diskussion Gruppe.
- Betrachten, was Sie vorschlagen, kann nicht ideal sein: in einigen Fällen, minimale support wird vorgeschlagen, damit die Menschen schreiben können Bibliotheken mit Ihnen, damit wir herausfinden können, der beste Weg, um zu standardisieren. Wenn wir dies nicht tun, werden wir coukd am Ende mit Schweinereien wie
vector<bool>
... Es kann eine überraschend kleine Gruppe von primitiven zu ermöglichen, wirklich leistungsstarken Bibliotheken. - Hmm das ist nicht wirklich c++1y, als c++1y bezieht sich auf den meisten wahrscheinlich c++14, wenn wir Glück haben. Nennen wir es c++1z? 😉
- Gutes feature != gute Frage
- Diese Frage scheint off-topic, weil es um Spekulation. Es gehört der std-Vorschläge forum.
- dann schließen Sie es oder fügen Sie etwas von Wert zu. Ich würde lieber sehen, die Menschen diskutieren über die neuen features in C++ und bessere Wege finden, um das bauen von Dingen. Ihr negativer Kommentar ist mehr als nutzlos Hausaufgaben Fragen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Reflexion Anwendungsfälle beschrieben werden N3814:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3814.html
Die Allgemeine Ansicht ist, dass wir es tun werden als Erweiterung des Type-Traits-Bibliothek, wie beispielsweise durch N3815:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3815.html
Es gibt zwei Teile zur Reflexion. Die erste ist Introspektion. Unter einer Entität und Abfragen von Konstanten Werten darüber. Die zweite ist verdinglichung, die das Gegenteil - mit Werten zum erstellen neuer Einheiten.
Zur Selbstbeobachtung - Sie können erwarten, zusätzliche Merkmale, die Ihnen erlauben, auflisten und Holen Sie sich die Namen der Schüler, Basis-Klassen, Enumeratoren, Funktion, Parameter und so weiter zur compile-Zeit. Von dort aus können Sie Sie für Dinge wie die Serialisierung, memberwise Vorgänge, statische Prüfungen und verschiedene andere Dinge.
Zusätzlich später suchen wir an verdinglichung, das würde bedeuten, die Schaffung neuer Entitäten, die aus Konstanten Werten mit mehr Ausdruckskraft, als Sie mit einer Vorlage. So vielleicht könnten Sie füllen eine
std::class_specifier s
struct, und rufen Sie dannmake_type_from_spec(s)
um den Typ.Der Introspektion Ansatz hat mehr Konsens im moment der verdinglichung Seite ist weiter Weg.
std::tuple
- es kann nicht sein, eine for-Schleife als solche, aber Sie werden in der Lage sein, den gleichen Effekt zu erhalten, etwas zu tun für jeden in der Klasse.