Jak zainicjować zmienną statyczną dla częściowej specjalizacji?C++ Jak zainicjować zmienne statyczne częściowej specjalizacji szablonów
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 = "";
Dlaczego częściowa praca nie działa?
EDIT: Znalazłem rozwiązanie oparte na Partial template specialization for initialization of static data members of template classes
muszę powtórzyć deklaracji dla częściowej specjalizacji zanim pozwolił mi zainicjować zmienną statyczną:
template <bool B>
struct from<true, B> {
const static std::string value;
};
Ponownie, pytanie brzmi, dlaczego ?
Który kompilator? W [g ++ 4.3.4] (http://ideone.com/jM6sIb), ostatni też nie działa. – didierc
Czy nie musisz także specjalizować całego szablonu zajęć? Myślę, że dla członków dozwolona jest tylko jawna (= pełna) specjalizacja. –
kompilator był VS2010 –