Как я могу использовать специализацию шаблона в классах C ++ и почему он не компилируется?

Я работаю над классом XmlWriter , и я хотел иметь возможность выводить атрибуты или текст в большинстве стандартных форматов данных (строки, целые числа, плавающие номера точек и т. д.). Для этого я использую файловый поток.

Для типа данных bool я хотел указать специализацию шаблона, чтобы он выводил true и false вместо 1 и 0 .

Однако следующий код, похоже, не компилируется:

class XmlWriter {

private: /* ... */

public: /* ... */

    template <typename T>
    void writeText(T text)  {
        /* ... */
    }

    template <>  // <-- error: explicit specialization in non-namespace scope 'class Strategy::IO::XmlWriter'
    void writeText<bool> (bool text) {  // <-- error: template-id 'writeText<>' in declaration of primary template
        /* ... */
    }

    template <typename T> 
    void writeAttribute(std::string key, T value) { // <-- error: too many template-parameter-lists
        /* ... */
    }

    template <>  // <-- error: explicit specialization in non-namespace scope 'class Strategy::IO::XmlWriter'
    void writeAttribute<bool> (std::string key, bool value) { // <-- error: variable or field 'writeAttribute' declared void; expected ';' before '<' token
        /* ... */
    }
}; // <-- expected ';' before '}' token

Я не понимаю, почему все эти ошибки, поскольку я использовал правильный синтаксис, представленный на различных веб-сайтах в Интернете?

Я использую Cygwin GCC.

13
задан Tibi 28 February 2012 в 17:50
поделиться