Re[3]: Шаблоны/наследование вложенных классов
От: Greg Zubankov СССР  
Дата: 20.12.05 15:49
Оценка: 2 (1)
Здравствуйте, JohnDoe, Вы писали:

JD>
JD>class A1
JD>{
JD>    class B1: public A1{};
JD>};
JD>

JD>'A1' : base class undefined. Почему тогда в случае с шаблонами все нормально(как A стал defined)? Ткните в стандарт, если можно — сам не нашел(может плохо искал).
Классы перечисленные в спецификации базовых классов не могут быть неполностью определенными типами. Стандарт 10/1.
В случае с шаблонами: некоторые компиляторы проводят только лексический анализ шаблонов, тогда как синтаксический откладывают до момента инстанцирования.
Шаблоны/наследование вложенных классов
От: JohnDoe  
Дата: 20.12.05 14:39
Оценка:
Есть несколько непоняток по коду:
template <typename T> class A
{
public:
    template <int j> class B: public A{};
};


typedef A<int>::B<1> ::B<2> ::B<3> C;


1. Почему B может наследоваться от enclosing класса A?

2. Что такое в вышепреведенном тайпдефе C? A::B<3>?

Заранее спасибо.
Re: Шаблоны/наследование вложенных классов
От: stasan  
Дата: 20.12.05 15:00
Оценка:
J> 1. Почему B может наследоваться от enclosing класса A?

Почему бы нет?

J> 2. Что такое в вышепреведенном тайпдефе C? A::B<3>?


A<int>::B<3>

--
Stas
Posted via RSDN NNTP Server 1.9
Re[2]: Шаблоны/наследование вложенных классов
От: JohnDoe  
Дата: 20.12.05 15:06
Оценка:
S>Почему бы нет?

class A1
{
    class B1: public A1{};
};

'A1' : base class undefined. Почему тогда в случае с шаблонами все нормально(как A стал defined)? Ткните в стандарт, если можно — сам не нашел(может плохо искал).

S>A<int>::B<3>


Ок. Тогда спрошу подругому куда делись B<1> и B<2> и что означает(подробно) эта форма записи?
typedef A<int>::B<1> ::B<2> ::B<3> C;
Re: Шаблоны/наследование вложенных классов
От: Lorenzo_LAMAS  
Дата: 20.12.05 15:13
Оценка:
Здравствуйте, JohnDoe, Вы писали:

JD>Есть несколько непоняток по коду:

JD>
JD>template <typename T> class A
JD>{
JD>public:
JD>    template <int j> class B: public A{};
JD>};
JD>


JD>1. Почему B может наследоваться от enclosing класса A?


не может, просто компилер у тебя такой, а вот что сказал comeau

"ComeauTest.c", line 4: error: incomplete type is not allowed
template <int j> class B: public A{};

Of course, the code must be complete enough to compile and link.
Re[3]: Шаблоны/наследование вложенных классов
От: Bell Россия  
Дата: 20.12.05 15:19
Оценка:
Здравствуйте, JohnDoe, Вы писали:

S>>Почему бы нет?


JD>
JD>class A1
JD>{
JD>    class B1: public A1{};
JD>};
JD>

JD>'A1' : base class undefined. Почему тогда в случае с шаблонами все нормально(как A стал defined)?

Попробуй инстанциировать шаблон A1 — некоторые компиляторы не обращают никакого внимания на шаблоны до момента инстанциирования.
Любите книгу — источник знаний (с) М.Горький
Re[2]: Шаблоны/наследование вложенных классов
От: JohnDoe  
Дата: 21.12.05 07:33
Оценка:
L_L>не может, просто компилер у тебя такой, а вот что сказал comeau

L_L>

L_L>"ComeauTest.c", line 4: error: incomplete type is not allowed
L_L> template <int j> class B: public A{};


VC 7.1 проглотил за милую душу.
Re[4]: Шаблоны/наследование вложенных классов
От: JohnDoe  
Дата: 21.12.05 07:45
Оценка:
Здравствуйте, Greg Zubankov, Вы писали:

GZ>В случае с шаблонами: некоторые компиляторы проводят только лексический анализ шаблонов, тогда как синтаксический откладывают до момента инстанцирования.


Спасибо. То есть в данном случае VC 7.1 не совсем прав?

Все ще остается вопрос про
typedef A<int>::B<1> ::B<2> ::B<3> C;

Что означает такая форма записи?
Re[5]: Шаблоны/наследование вложенных классов
От: Greg Zubankov СССР  
Дата: 21.12.05 08:12
Оценка:
Здравствуйте, JohnDoe, Вы писали:

JD>Здравствуйте, Greg Zubankov, Вы писали:


GZ>>В случае с шаблонами: некоторые компиляторы проводят только лексический анализ шаблонов, тогда как синтаксический откладывают до момента инстанцирования.


JD>Спасибо. То есть в данном случае VC 7.1 не совсем прав?


JD>Все ще остается вопрос про

JD>
JD>typedef A<int>::B<1> ::B<2> ::B<3> C;
JD>

JD>Что означает такая форма записи?

Второе есть следствие первого. Если первое невозможно, невозможно и второе т.е. это объявление на основе первого.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.