Handgemachte automatische Vorlage (ohne Verwendung von C ++ 0x)

8

Wie kann die auto Schlüsselwortfunktionalität ohne Verwendung des C ++ 0x-Standards realisiert werden?

%Vor%

Vielleicht solche Klasse:

%Vor%

Bei einer solchen Verwendung:

%Vor%

Aber T1 und T2 sind anders. Wie verschiebe ich Informationen über T1 nach operator T2 () ? Ist das wirklich möglich?

    
k06a 05.09.2010, 19:33
quelle

4 Antworten

12

Wenn eine Bibliothekserweiterung einfach implementiert werden konnte, war keine Spracherweiterung erforderlich. Einzelheiten zum automatischen Vorschlag finden Sie N1607 .

>

Der Artikel auf der Boost.Foreach (welche Art von tut was Sie wollen) Makro kann helfen, die Probleme im Zusammenhang mit einer solchen Implementierung zu verstehen.

  

Was ist BOOST_FOREACH?

     

In C ++ schreibt man eine Schleife, die iteriert   über eine Sequenz ist langweilig. Wir können   Verwenden Sie entweder Iteratoren, die a erfordern   beträchtliche Menge an Kesselplatte,   oder wir können die std :: for_each () benutzen   Algorithmus und verschiebe unseren Schleifenkörper in   ein Prädikat, das nicht weniger erfordert   Kesselplatte und zwingt uns, unsere zu bewegen   Logik weit weg von wo es verwendet wird.   Im Gegensatz dazu, einige andere Sprachen,   wie Perl, bieten eine dedizierte   "foreach" Konstrukt, das automatisiert   dieser Prozess. BOOST_FOREACH ist einfach   ein solches Konstrukt für C ++. Es iteriert   über Sequenzen für uns, die uns befreien   sich direkt mit Iteratoren beschäftigen   oder schreibe Prädikate.

     

BOOST_FOREACH ist konzipiert für   Benutzerfreundlichkeit und Effizienz. Es tut nicht   dynamische Zuordnungen, macht keine virtuelle   Funktionsaufrufe oder Anrufe durch   Funktionszeiger und führt keine Aufrufe aus   die sind nicht transparent für die   Compiler-Optimierer. Das führt zu   nahezu optimale Codegenerierung; das   Leistung von BOOST_FOREACH ist   in der Regel innerhalb von ein paar Prozent der   gleichwertige handcodierte Schleife. Und   obwohl BOOST_FOREACH ein Makro ist, ist es   ist ein bemerkenswert gut erzogener. Es   wertet seine Argumente genau einmal aus,   zu keinen bösen Überraschungen führen.

    
dirkgently 05.09.2010, 19:35
quelle
10

Es gibt ein BOOST_AUTO Makro, das mehr oder weniger was macht auto keyword ... Ein Blick auf die Implementierung zeigt jedoch, dass es viel besser ist, einen Weg zu finden, C ++ 0x zu verwenden: & gt;

    
Kornel Kisielewicz 05.09.2010 19:42
quelle
3

Sie können diese Makros verwenden, um dies in einer standardkonformen Weise zu umgehen.

%Vor%

So wird Ihre for-Schleife

%Vor%

Der Kredit geht an Bedingte Liebe: FOREACH Redux , von Eric Niebler. Bin mir nicht sicher, ob es sich wirklich lohnt:)

    
Johannes Schaub - litb 10.09.2010 22:18
quelle
2

Das unmittelbare Problem besteht darin, Informationen vom abgeleiteten Typ in eine Datenmemberdeklaration zu übernehmen.

%Vor%

Das wird eindeutig nicht passieren, weil das Objekt AUTO vor dem Aufruf der Funktion zugewiesen werden muss.

Gegeben typeof oder decltype , aber es ist nicht so schwer.

%Vor%

Das hat natürlich viele Einschränkungen. Und typeof ist kein Standard. Mit mehreren Compiler-Unterstützung wäre dies wahrscheinlich die Grundlage für diese Boost-Tools.

    
Potatoswatter 05.09.2010 20:52
quelle

Tags und Links