2016-04-08 3 views
3

Im Folgenden ein Auszug aus this cppreference Seite über variable templateDie Deklarationen im folgenden Link benötigen nicht den Storage-Class-Specifier `static`. Hab ich recht?

Wenn bei Klassenbereich verwendet, variable Schablone Mitglied Vorlage einer statischen Daten erklärt.

using namespace std::literals; 
struct matrix_constants 
{ 
    template<class T> 
    using pauli = hermitian_matrix<T, 2>; // alias template 

    template<class T> // static data member template 
    static constexpr pauli<T> sigma1 = { { 0, 1 }, { 1, 0 } }; 

    template<class T> 
    static constexpr pauli<T> sigma2 = { { 0, -1i }, { 1i, 0 } }; 

    template<class T> 
    static constexpr pauli<T> sigma3 = { { 1, 0 }, { 0, -1 } }; 
}; 

Die C++ Standard (N4140) sagt der folgende Absatz in §14.1 (1.4):

Eine variable Schablone am Klassenbereich ist ein statisches Datenelement Vorlage.

So scheint es mir, die Erklärungen in dem obigen Link kann static die Speicherklasse-Angabe nicht benötigen. Hab ich recht?

S.S .: Ich habe gerade meine Untersuchung über Vorlagen begonnen.

+0

Sind Sie sicher, dass Sie wirklich Ihre * Untersuchung an Vorlagen * mit variablen Vorlagen beginnen möchten? Kann es etwas einfacher sein? – SergeyA

+0

@SergeyA Ich weiß, dass der Standard nicht der beste Ort ist, um C++ zu studieren, aber für den Moment mache ich das, d. H. Ich folge dem Standard. –

+0

@Barry Aber [C++ 0z] (http://eel.is/c++draft/temp#1) hat das oben gezeigte Beispiel immer noch nicht korrigiert. –

Antwort

1

Während ich immer noch nicht denke, dass Sie den richtigen Kurs gewählt haben, um Vorlagen zu studieren, werde ich direkte Frage beantworten.

Der Wortlaut von Standard (und cppreference) bedeutet, dass Vorlagenvariablen als static definiert werden sollten, wenn sie Klassenmitglieder sind. Es ist eine Voraussetzung für den Entwickler.

Verwandte Themen