[fpc-pascal] May I Interject? A Generic Inheriting a Generic in a Generic Way
Sven Barth
pascaldragon at googlemail.com
Sat Feb 21 18:20:44 CET 2015
On 20.02.2015 22:19, Raheman Velji wrote:
> I have an idea called Interjections. I have posted on the forum so that
> everybody can access it nicely. Here are the links:
>
> http://forum.lazarus.freepascal.org/index.php/topic,27452.0.html
> and its continuation
> http://forum.lazarus.freepascal.org/index.php/topic,27453.0.html
>
> Please include interjections in future versions of Free Pascal!
> And ask me questions and comments if you have any!
You consider this "more readable"? Honestly, no... Code gets already
convoluted enough if it uses macros, so something like that is
definitely not needed. We are not C after all...
Also what you mentioned in your second article already works since quite
some months in 2.7.1 and thus by extension in 3.0.0 and 3.1.1:
=== code begin ===
program tgeninherit;
{$mode objfpc}
type
generic TMyListBase<data_type> = class
procedure VirtualProc( data : data_type ); virtual; abstract;
procedure InternalProc; // <-- which uses VirtualProc
end;
generic TMyList<data_type> = class(specialize TMyListBase<data_type>)
end;
TIntegerList = class(specialize TMyList<Integer>)
procedure VirtualProc(data: Integer); override;
end;
TStringList = class(specialize TMyList<String>)
procedure VirtualProc(data: String); override;
end;
TBooleanList = class(specialize TMyList<Boolean>)
procedure VirtualProc(data: Boolean); override;
end;
procedure TMyListBase.InternalProc;
begin
VirtualProc(Default(data_type));
end;
procedure TIntegerList.VirtualProc(data: Integer);
begin
Writeln(data);
end;
procedure TStringList.VirtualProc(data: String);
begin
Writeln(data);
end;
procedure TBooleanList.VirtualProc(data: Boolean);
begin
Writeln(data);
end;
begin
end.
=== code end ===
Regards,
Sven
More information about the fpc-pascal
mailing list