Wie man den default-Wert eines beliebigen Typs

In C# kann ich etwas schreiben wie dieses:

    class AnyThing<T>
    {
        static public T Default = default(T);
    }

    static void Main ()
    {
        int i = AnyThing<int>.Default;
        Console.WriteLine (i==0);
        string s = AnyThing<string>.Default;
        Console.WriteLine (s == null);

    }

Ich beabsichtige zu schreiben, ein Wörterbuch wie die Vorlage-Klasse in C++, ich würde gerne die dict-die Rückkehr der default-Wert (null) von der generischen TVal geben, wenn der angegebene Schlüssel nicht gefunden werden. In C# die Standard - (T) konstruieren Sie kommt zu retten, während in C++ bin ich mir nicht sicher, was ist der geeignete Weg, um das gleiche zu tun.

Ich habe versucht T obj = {} und T* obj = {} mit gcc4.7, funktioniert es auch. Ich bin nur nicht so sicher, ob es die syntax definiert die Sprachspezifikation, wenn diese irgendwie wird der code tragbare-cross-Compiler und Plattformen. Bitte helfen Sie mir mit meinem doudt! Vielen Dank im Voraus!

PS:

~~~~~~~~~~

Sicherstellen, dass die Vorlage erhalten Sie den Standardwert(null) Wert eines BELIEBIGEN Typs, auch von denen, die nicht aufrufbar default ctor, verwendete ich folgenden Mechanismus (inspiriert durch avakar Antwort):

template<class T>
struct AnyThing
{
    static const T& Default ;
private:
    static const char temp[sizeof(T)];
};

template<class T> const char AnyThing<T>::temp[] = {};
template<class T> const T& AnyThing<T>::Default =  *(T*)temp;

struct st
{
    double data;
    st()=delete;
};

int main()
{
    cout << (int)AnyThing<char*>::Default<<endl;    //0
    cout << AnyThing<int>::Default<<endl;       //0
    cout <<AnyThing<st>::Default.data<<endl;        //0
}

Sieht es hässlich aus, aber sollte nicht dazu führen, keine Probleme, alle gelöscht Objekt ist nur ein Stück leere Speicher. Bin ich falsch?

InformationsquelleAutor Need4Steed | 2012-09-27
Schreibe einen Kommentar