Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Области видимости в паскаль


Автор: powerfox 10.3.2007, 15:17
Привет! Я пока ещё серьёзного на паскале не писал, но вот начинаю.
Я пишу модуль, замену стандартному. Много функций мне подходят из стандартного, но мне нужно чтобы в начале их выполнения и в конце вызывалось по процедуре. Дописать в стандартные функции возможности нет (можно их копировать к себе, но нежелательно). Вот пример того, что я хочу:

Код

program test
uses my_graph;
...
line(x1,y1,x2,y2);


my_graph.pas:
Код

...
procedure line(x,y,x1,y1:Integer);
begin
SomeMyProcedure();
line (из стандартного graph);
SomeMyProcedure2();
end;


В С++ я бы просто включил бы стандартный модуль (тонее заголовок) в пространство имён и вызывал бы standart_module::line.


Автор: Sartorius 10.3.2007, 16:43
 Так в чем проблема? В своем модуле подключай стандартный и вызывай его функции. Но свои придется переименовать. ведь не понятно будет для компилятора рекурсивное это обращение или вызов дальней функции.
ЗЫ А ничего на подобии пространств имен я в паскале не припомню((

Автор: powerfox 10.3.2007, 18:24
Цитата(Sartorius @  10.3.2007,  17:43 Найти цитируемый пост)
Но свои придется переименовать.

В этом и проблема. Что переименовывать нельзя.
А класс в паскале позволяет делать так:
Код

CLASNAME.function

А внутри класса вставить юнит?

Автор: MBo 10.3.2007, 18:32
полная квалификация идентификатора включает в себя имя модуля, т.е. 
ModuleName.FuncName (VarName)

так что внутри своей процедуры напишешь
Graph.line


Автор: powerfox 10.3.2007, 18:34
А хотя бы сделать так:
Функция A вызывает функцию B. B в видимости A, но B видин graph, который не видит A? Такое есть в языке?

Добавлено @ 18:36 
MBo, а при вызове моей line проблем не будет разве? Ведь graph будет подключён.

Автор: MBo 10.3.2007, 19:13
> B видин graph, который не видит A
uses graph в implementation

>при вызове моей line проблем не будет разве?
вызовешь my_graph.line - и никаких проблем.
Если в uses есть и graph и my_graph, и ты напишешь просто line без квалификатора модуля, то вызовется процедура из последнего по списку uses


А вообще - ты создаешь проблемы какие-то на пустом месте.

Автор: powerfox 10.3.2007, 20:18
Цитата(MBo @  10.3.2007,  20:13 Найти цитируемый пост)
> B видин graph, который не видит Auses graph в implementation

Спасибо. Я не подумал, что видно только то, что определено интерфейсом. Не писал на пасаль почти ничего серьёзного.


Цитата(MBo @  10.3.2007,  20:13 Найти цитируемый пост)
вызовешь my_graph.line - и никаких проблем.

Цитата(MBo @  10.3.2007,  20:13 Найти цитируемый пост)
А вообще - ты создаешь проблемы какие-то на пустом месте.

Нужно именно line. Нужна полная совместимость с кодом под graph. А копирование кода line в мою line с добавлением нужных вызовов нежелательно, так как оба модуля с одного проекта и это нежелательно.

Автор: powerfox 12.3.2007, 00:30
В общем, кроме включения существующего кода, другого способа я не вижу. При вызове стандартной line она вызовет стандартный PutPixel, что недопустимо.

Добавлено @ 00:30 
P.S. Начну писать, там и видно будет...

Автор: Sartorius 12.3.2007, 14:11
 Возьми С-ный graphics.lib или как он там называется. Подключи его к проекту и не парься с модулями

ЗЫ там же все теже самые функции, его же тоже борланд писал.

Автор: powerfox 12.3.2007, 19:33
Sartorius, сам проект и есть написать sdlgraph smile Ребятам с fpc идея, кажется, понравилась. Вот я и прикидываю, что и как писать. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)