So erhalten Sie den Standardwert eines beliebigen Typs

In C # kann ich so etwas schreiben:

    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, ein Wörterbuch wie eine Template-Klasse in C ++ zu schreiben. Ich möchte, dass das Diktat den Standardwert (Null aus) des generischen TVal-Typs zurückgibt, wenn der angegebene Schlüssel nicht gefunden wird. In C # kommt das Standard (T) -Konstrukt zur Rettung, während ich in C ++ nicht sicher bin, wie ich dasselbe tun soll.

ich habe es versuchtT obj = {} undT* obj = {} mit gcc4.7 funktioniert es gut. Ich bin mir nur nicht so sicher, ob es sich um die in der Sprachspezifikation festgelegte Syntax handelt, ob dieser Code portabel für Cross-Compiler und Plattformen sein wird. Bitte hilf mir mit meinem doudt! Danke im Voraus!

PS:

~~~~~~~~~~

Um sicherzustellen, dass die Vorlage den Standardwert (Null) von JEDEM Typ erhält, auch von jenen, die keinen aufrufbaren Standard-ctor haben, habe ich folgenden Mechanismus angewendet (inspiriert von Avakars 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
}

Es sieht hässlich aus, sollte aber keine Probleme verursachen, schließlich ist ein auf Null gesetztes Objekt nur ein Stück leeren Speichers. Liege ich falsch?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage