Come inizializzare una variabile statica per una specializzazione parziale?C++ Come inizializzare le variabili statiche di una specializzazione di modello parziale
template <bool A=true, bool B=false>
struct from {
const static std::string value;
};
// no specialization - works
template <bool A, bool B>
const std::string from<A, B>::value = "";
// partial specialization - does not compile -
// Error: template argument list following class template name must list parameters in the order used in template parameter list
// Error: from<A,B>' : too few template arguments
template <bool B>
const std::string from<true, B>::value = "";
// full specialization - works
const std::string from<false, true>::value = "";
Perché il lavoro parziale non funziona?
EDIT: ho trovato una soluzione basata su Partial template specialization for initialization of static data members of template classes
ho bisogno di ripetere la dichiarazione per la specializzazione parziale prima mi ha permesso di inizializzare la variabile statica:
template <bool B>
struct from<true, B> {
const static std::string value;
};
Anche in questo caso, la domanda è perché ?
Quale compilatore? Su [g ++ 4.3.4] (http://ideone.com/jM6sIb), anche l'ultimo non funziona. – didierc
Non devi specializzare anche l'intero modello di classe? Penso che solo la specializzazione esplicita (= completa) sia consentita per i membri. Il compilatore –
era VS2010 –