Вне определения конструктора класса для специализированного шаблона класса - PullRequest
4 голосов
/ 14 октября 2010

Я пытаюсь определить конструктор для явно специализированного шаблона класса вне определения класса, например:

template <typename T>
struct x;

template <>
struct x<int> {
    inline x();

    /* This would have compiled:
    x() {
    }
    */
};

template <>    // Error
x<int>::x() {
}

Но, похоже, это ошибка.Комо говорит: error: "x<int>::x()" is not an entity that can be explicitly specialized, хотя специализация - полный класс.

В чем здесь проблема?

1 Ответ

13 голосов
/ 14 октября 2010

Не указывайте template<> для определения:

template <typename T>
struct x;

template <>
struct x<int> {
  x();
};

inline x<int>::x(){}

Редактировать: определение конструктора не является специализацией, поэтому template<> не требуется.Это определение конструктора специализации.Итак, вам просто нужно указать тип как для любого другого не шаблонного класса.

...