Классовые (вложенные) типы и видимость protected

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
and
постоялец
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Классовые (вложенные) типы и видимость protected

Сообщение and »

Такой код:

Код: Выделить всё

Type
  TMyClass=Class
           Private
             Type
               TMyMemoryStream=Class(TCustomMemoryStream)
                               End;
           Public
             Procedure MyProc;
           End;
Procedure TMyClass.MyProc;
Begin
  with TMyMemoryStream.Create
    do SetPointer(nil,0)
End;
даёт ошибку компиляции Error: Identifier not found "SetPointer".
Однако если TMyMemoryStream объявить не внутри класса, а отдельно (ессно, в том же модуле), то обращение к protected полям и методам (TCustomMemoryStream.SetPointer объявлен как protected) компилируется и работает.
Несколько нелогичная imho разница в поведении. Если это фича, объясните plz её смысл. Если баг - повесьте, пожалуйста, репорт: я, к стыду своему, до сих пор багтрекером так и не пользовался.

P.S. FPC 2.5.1 20110808.
SAK
постоялец
Сообщения: 158
Зарегистрирован: 17.02.2006 23:45:14
Откуда: Тим
Контактная информация:

Сообщение SAK »

Я бы назвал багом возможность объявлять тип внутри объявления другого типа. FPC 2.4.2 так и говорит. И что даёт такое объявление кроме путаницы?
Аватара пользователя
and
постоялец
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Сообщение and »

2SAK: Даёт возможность сделать объект действительно целостной сущностью, содержащей всё ей необходимое. Это следующий вполне логичный шаг в развитии:
record - только поля; процедуры-функции их обработки находятся где-то в другом месте;
Object/Class - данные+методы. Но [strike]The Truth[/strike] описания типов этих данных - возможно, никому, кроме данного класса, не нужных и не интересных, - по-прежнему "is Out There".

Впрочем, не будем раздувать холивар по поводу пользы/вреда от новых фич языка. Такого добра и без этой темы хватает.
Ask
постоялец
Сообщения: 163
Зарегистрирован: 25.12.2008 02:51:37

Сообщение Ask »

Баг уже давно в трекере: http://bugs.freepascal.org/view.php?id=18767
Аватара пользователя
and
постоялец
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Сообщение and »

2Ask: Thanks!
Date Submitted: 2011-02-16 21:25
Status: new

Мде :-/
Ask
постоялец
Сообщения: 163
Зарегистрирован: 25.12.2008 02:51:37

Сообщение Ask »

Поправка: Павел Ишенин говорит, что во-первых, в трекере похожий, но не этот баг,
и что во-вторых он вроде как этот баг собирается пофиксить.
Аватара пользователя
and
постоялец
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь

Сообщение and »

Вижу, баг в трекере resolved.
Попутно узнал о существовании FPC 2.7.1 :-)
Ответить