Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
1

Вложенные классы. Что за синтаксис такой?

02.06.2015, 18:24. Показов 1262. Ответов 5
Метки нет (Все метки)

Всем привет! Писал код с вложенным классом, столкнулся с таким синтаксисом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
template <typename Type>
class ExternalClass {
private:
    class NestedClass {
    public:
        //поля и методы NestedClass
    };
    //поля и закрытые методы ExternalClass
    public:
    //открытые методы ExternalClass
    NestedClass * someMethod();
};
 
//бла-бла-бла, определения разных методов...
 
//и вот я хочу определить метод, который возвращает, допустим, указатель на NestedClass
template <typename Type>
typename ExternalClass<typename Type>::NestedClass * someMethod(){
    //определение метода...
}
Меня интересует 18 строчка. Я понимаю, что класс NestedClass является вложенным в ExternalClass, и, чтобы определять его отдельно, нужно указать его область видимости (как бы, путь к нему). Но для чего так много typename'ов?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2015, 18:24
Ответы с готовыми решениями:

Шаблоны и вложенные классы - синтаксис
Пишу класс бинарного красно черного дерева, решил сделать структуру узла в нем вложенной, но...

Вложенные классы и статические вложенные классы - нужен пример
Добрый вечер, форумчане! :) Поделитесь примерами практических задач, при решении которых полезно...

Чего Английский такой нудный, нафиг он нужен такой синтаксис?
Вот, у них конкурсы проходят в школах, кто знает как писАть слово. Их имена уже достали со своим...

Кто видел такой синтаксис?
public long? ID { get; set; } = null; С каким framework ом такое возможно и что значит &quot;long?&quot;

5
Эксперт С++
4967 / 3074 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
02.06.2015, 18:31 2
Второй typename в 18-й строке лишний.
1
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
02.06.2015, 18:41  [ТС] 3
Цитата Сообщение от castaway Посмотреть сообщение
Второй typename в 18-й строке лишний.
Да, ошибся. Вот так эта строка вообще выглядит:
C++
1
typename ExternalClass<Type>::NestedClass * ExternalClass<Type>::someMethod(){
Т.е., разрешение контекста для возвращаемого типа и для самого метода. Это понятно. Но все еще непонятно, для чего первый typename?
0
Эксперт С++
4967 / 3074 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
02.06.2015, 18:51 4
Лучший ответ Сообщение было отмечено goditsa8 как решение

Решение

Цитата Сообщение от goditsa8 Посмотреть сообщение
Но все еще непонятно, для чего первый typename?
Так требует стандарт языка.
typename говорит о том, что NestedClass является типом.
1
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
02.06.2015, 19:08  [ТС] 5
castaway, спасибо!
Т.е., раз о NestedClass знает только ExternalClass, то компилятору надо явно сообщить, что NestedClass является типом (классом)? Иначе компилятор не понимает что это вообще такое? Хотя, конечно, мог бы разобраться. )
0
:)
Эксперт С++
4766 / 3260 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
02.06.2015, 19:10 6
Цитата Сообщение от castaway Посмотреть сообщение
Так требует стандарт языка.
typename говорит о том, что NestedClass является типом.
Добавлю, что по умолчанию (без typename) сущность, зависимая от параметра шаблона является чем угодно, но только не типом (например, это может быть статический член), и не важно, что по контексту такой вариант не возможен в принципе. А вот чтобы однозначно указать на то, что это тип - нужно добавить typename.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2015, 19:10

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

Вложенные классы
Как обратится к приватному полю класса(Builder), из вложенных в этот класс(Builder) классов...

Вложенные классы
Такой вопрос. Вложенные классы(А) нужны отчасти в тех случаях, когда планируется создавать...

Вложенные классы
Помогите, пожалуйста! Создать класс Liquid (жидкость), имеет поля «имя» и «плотность». определить...

Вложенные классы
Напишите пожалуйста пример практического применения внутренних классов с коментами... А то в инете...

вложенные классы
Здорова господа! Снова мучаю класс String еще не замучал. Не могу скомпилировать программу с...

Вложенные классы!!
НЕ могу разобраться ка это работает!!! приведите пожалуйста простой пример как это работает с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.