2014-02-24 5 views
5

Gibt es in C++ 03 oder früher eine Möglichkeit, das Schlüsselwort auto zu implementieren? Nicht eine Objektklasse, aber so, dass es wie folgt verwendet werden [C++ 11]Gibt es eine Möglichkeit, das Schlüsselwort auto für C++ zu implementieren? 03

auto x = 5; 
std::cout << x; 

I ‚gepeitscht‘ schnell eine Implementierung, aber es ist ziemlich Müll, wie Sie es auf jede Art werfen können - zu viel wie eine object Klasse, und ziemlich einfach, ich weiß, aber wie auch immer, hier ist es:

class auto_t 
{ 
public: 
    template < typename _Ty > auto_t(const _Ty &_Value) 
     : __data(_Value) 
    { 
    } 

    template < typename _Ty > operator _Ty() 
    { 
     return (_Ty)__data; 
    } 
private: 
    void *__data; 
}; 

#define auto auto_t 
+0

Wenn Sie einen bestimmten Compiler verwenden, warum nutzen Sie nicht eine Erweiterung (z. B. GCC's '__typeof')? –

+0

Der nächste (aber weit entfernte) in diese Richtung ist boost :: foreach, denke ich. –

+0

Seltsam, dass es Ihnen nicht in den Sinn gekommen ist, einen C++ 11-Compiler zu verwenden –

Antwort

1

Es gibt keine Möglichkeit, die automatische Funktionalität von C++ 11 mit der gleichen Syntax zu emulieren. Der von Ihnen bereitgestellte Code führt einen neuen Typ ein, der nur versucht, den ursprünglichen Typ zu umbrechen (ohne dabei die Tatsache zu berücksichtigen, dass die ursprüngliche Lebensdauer des ursprünglichen Objekts nicht beibehalten wird). Dieser neue Typ wird jedoch nicht folgen die gleichen Regeln für Argument abhängige Suche und Typkonvertierungen als Ihr ursprünglicher Typ. Das Schlüsselwort auto in C++ 11 ist eine Sprachfunktion, keine Bibliothekserweiterung. Das Beste, was Sie tun können, um es zu emulieren, ist mit einem MACRO wie der boost library tut.

+0

Sie können die URL in 'http://www.boost.org/doc/libs/1_55_0/doc/html/typeof/refe.html# ändern. typeof.auto', um die neueste Version zu reflektieren. –

+0

@remyabel oder sogar: http://www.boost.org/doc/libs/release/doc/html/typeof/refe.html#type.typo – BenPope

1

ich kann nicht glauben, von irgendeiner Weise zu tun, was Sie andere wollen als einen Compiler zu schreiben, das die beabsichtigte Art inspiziert und erstellt den passenden Code für Sie.

Das ist eine Sprachfunktion und daher von Compilern implementiert.

3

Nicht wirklich. Aus diesem Grund stellt C++ 11 es als Schlüsselwort und nicht als Bibliotheksfunktion vor.

Verwandte Themen