- Код: Выделить всё
- app := tapplication.get_instance();
но ничего не выходит, немного кода:
- Код: Выделить всё
- unit tr_application;
 interface
 
 uses
 //. . .
 type
 papplication = ^tapplication;
 
 tapplication = class
 private
 fwindow_name : string;
 fwindow_width : integer;
 fwindow_height : integer;
 ffullscreen : boolean;
 fparams : tstringList;
 
 public
 
 property window_width : integer read fwindow_width write fwindow_width;
 property window_height : integer read fwindow_height write fwindow_height;
 
 constructor create();
 destructor destroy();
 function get_instance() : papplication; static;
 . . .
 private
 
 end;
 
 
 implementation
 
 { Где объявлять переменную для хранения ссылки на экземпляр класса(на созданный объект)? }
 var
 app : papplication = nil;
 
 constructor tapplication.create();
 begin
 fwindow_name := 'tr_application_empty';
 fwindow_width := 800;
 fwindow_height := 600;
 ffullscreen := false;
 end;
 
 function tapplication.get_instance() : papplication;
 begin
 if(app = nil) then begin
 app := papplication(tapplication.create());
 end;
 result := app;
 end;
 . . .
Использую это хозяйство так:
- Код: Выделить всё
 program ttt;
 uses
 tr_application;
 var
 app : papplication;
 begin
 app := tapplication.get_instance();
 app^.create_window('', 1024, 768, false);
 app^.main_loop();
 
 app^.destroy();
 end.
Сложность вызывает момент непосредственно создания объекта, где хранить ссылку на экземпляр класса? Например, в С++ можно хранить ссылку прямо в переменной класса, объявив её сатической, можно ли так же сделать в паскале, или нужно в каком-то блоке var это делать? На wiki так и сделано(http://wiki.freepascal.org/Singleton_Pattern), но в моём случае, компилятор ругается на app := tapplication.get_instance():
Error: Only class methods, class properties and class variables can be referred with class reference
Как же всё таки запилить синглтон?





