Определение шаблона класса-члена C++ в контексте пространства имен с параметром шаблона, который является частным в класC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Определение шаблона класса-члена C++ в контексте пространства имен с параметром шаблона, который является частным в клас

Сообщение Anonymous »


Я хочу определить шаблон класса-члена C++ в контексте пространства имен. Шаблон класса-члена и тип, используемый параметром для этого шаблона, объявляются закрытыми в классе, содержащем шаблон члена. Компилятор жалуется, что тип параметра шаблона объявлен закрытым.

Когда я использую g++ (GCC) 13.2.0 для компиляции следующего кода в файле temp.cc

// следующее определение класса будет помещено в отдельный файл заголовка класс А { public: // Я не хочу объявлять структуру S публичной частный: структура Н; шаблон struct S; // Я не хочу определять здесь структуру S! }; // следующее определение будет помещено в отдельный файл template struct A::S { }; Я получаю следующую ошибку

g++ temp.cc temp.cc:9:19: ошибка: «struct A::N» является частной в этом контексте 9 | template struct A::S { | ^ temp.cc:5:10: примечание: здесь объявлено как личное 5 | структура Н; | ^ Есть ли способ успокоить компилятор без объявления struct N общедоступной?

Обратите внимание, что определение struct N в частной области класса A компилируется нормально

класс A { публика: частный: структура Н; шаблон struct S {}; // нет ошибки компиляции! }; Следовательно, проблема в том, что поведение компилятора кажется непоследовательным: struct A::S разрешено использовать struct N* в качестве параметра шаблона, когда struct A::S определена в области класса A, но не тогда, когда она определена в области пространства имен. Почему бы и нет?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»