Доступ к членам шаблона класса из статических функций специализированного шаблона того же класса

#c #static-members

#c #статические члены

Вопрос:

Я все еще изучаю шаблоны C и столкнулся с проблемой, связанной с вызовом членов из специализированных статических функций, используя следующее. GCC жалуется: «недопустимое использование члена C< const char* >::value в статической функции-члене».Я искал этот форум и несколько других, и даже мой друг Google не может мне помочь. Я полагаю, что ошибка должна быть чем-то, что я упускаю из виду, поскольку я создал неспециализированную версию класса (с той же статической функцией-членом), и я все равно получаю ту же ошибку. Есть идеи?

 template <typename T = const char*>
class C { };

//specialization for const char*
template <>
class C <const char*> {
  public:
    C() { }

    static void echo(int x);

  private:
    int value;
};

//error occurs here
void C<const char*>::echo(int x) {
  value = x;
}
  

Большое спасибо за любую информацию, которую вы можете предложить.

Ответ №1:

Это не имеет ничего общего с шаблонами.

value является членом экземпляра и может быть доступен только при предоставлении экземпляра C . У статической функции нет this экземпляра, и вы также не использовали . -> оператор доступа к элементу or для явного предоставления экземпляра.

Ответ №2:

echo() Является статическим, поэтому не может получить доступ к полю уровня экземпляра value .

Либо сделайте функцию нестатической, либо сделайте поле статическим.

Комментарии:

1. Точнее, он не может получить доступ к элементу экземпляра, используя неквалифицированное имя.