Feld in Klasse mit {} initalisieren



  • Ich habe eine Template-Klasse, die als einziges Datenelement ein Feld enthält. Ich habe gerade gemerkt, dass ich deren Instanzen mit einer Feldinitalisierung initalisieren kann. Kann mich mal jemand aufklären, unter welchen Umständen genau ich die Feldinitalisierung in eigenen Klassen verwenden kann? Ich glaube mich zu erinnern, dass ich es früher vergebens versucht habe (in der Tat hab ich den Post verfasst, weil ich dächte es gänge nicht, aber anscheinend doch).

    // funktoniert (irgentwie..)
    template <typename T,int D>
    struct Vector
    {
    	T ar[D];
    
    	void inc()
    	{
    		for(int i=0;i<D;++i)
    		{
    			ar[i] += 1;
    		}
    	}
    };
    
    // ...
    
    Vector<int,3> a = {1,2,3}; // geht !?
    


  • Wird erst mit dem neuen Standard gehen bzw. höchstwarscheinlich.

    Kurz: Derzeit ist das nicht möglich.



  • O_o schrieb:

    Kann mich mal jemand aufklären, unter welchen Umständen genau ich die Feldinitalisierung in eigenen Klassen verwenden kann?

    Ja. Die Initialisierung funktioniert dann, wenn deine Klasse ein sogenanntes Aggregate ist.

    An aggregate is an array or a class (clause 9) with no user-declared constructors (12.1), no private or protected non-static data members (clause 11), no base classes (clause 10), and no virtual functions (10.3).



  • Danke. Sowas hab ich gesucht. 🙂


Anmelden zum Antworten