- Код: Выделить всё
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
Как же всё таки запилить синглтон?