Предварительное определение вложенного класса
От: Аноним  
Дата: 30.08.07 08:58
Оценка:
Насколько данное законно? Comeau online компилирует.
class a
{
class b;
};

class a::b
{

};


int main()
{
return 0;
}
Re: Предварительное определение вложенного класса
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 30.08.07 09:19
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Насколько данное законно? Comeau online компилирует.


Ни каких проблем. Более того, рекомендуют (по возможности) служебные вложенные классы определять не в заголовочном файле, а в CPP файле с реализацией охватывающего класса. Типа для сокращения времени компиляции и для скрытия деталей реализации.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: Предварительное определение вложенного класса
От: Bell Россия  
Дата: 30.08.07 09:21
Оценка: 3 (2)
Здравствуйте, Аноним, Вы писали:

А>Насколько данное законно? Comeau online компилирует.

Ну, это уже о многом говорит
Да, это законно:

9.7/3
If class X is defined in a namespace scope, a nested class Y may be declared in class X and later defined in
the definition of class X or be later defined in a namespace scope enclosing the definition of class X.
[Example:

class E {
   class I1; // forward declaration of nested class
   class I2;
   class I1 {}; // definition of nested class
};
class E::I2 {}; // definition of nested class

—end example]

Любите книгу — источник знаний (с) М.Горький
Re: Предварительное определение вложенного класса
От: jazzer Россия Skype: enerjazzer
Дата: 30.08.07 09:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Насколько данное законно? Comeau online компилирует.

А>
А>class a
А>{
А>  class b;
А>};

А>class a::b
А>{
А>};
А>

абсолютно законно, это стандартный прием для упрятывания реализации, дабы не тащить наружу типы, которые нужны только для реализации данного класса.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Предварительное определение вложенного класса
От: remark Россия http://www.1024cores.net/
Дата: 30.08.07 09:25
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Насколько данное законно? Comeau online компилирует.

А>
А>class a
А>{
А>class b;
А>};

А>class a::b
А>{

А>};
А>


Всё корректно.
Для вложенных классов нельзя делать форвард объявление — это да. А так вполне можно.
Такой приём часто применяют при реализации pimpl.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: Предварительное определение вложенного класса
От: Аноним  
Дата: 30.08.07 09:48
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>>Насколько данное законно? Comeau online компилирует.

B>Ну, это уже о многом говорит
B>Да, это законно:
B>

B>9.7/3
B>If class X is defined in a namespace scope, a nested class Y may be declared in class X and later defined in
B>the definition of class X or be later defined in a namespace scope enclosing the definition of class X.
B>[Example:

B>
B>class E {
B>   class I1; // forward declaration of nested class
B>   class I2;
B>   class I1 {}; // definition of nested class
B>};
B>class E::I2 {}; // definition of nested class
B>

B>

B>—end example]


Спасибо за ссылку
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.