[fpc-pascal] Generics vs templates

Ryan Joseph ryan at thealchemistguild.com
Mon Jan 8 12:21:20 CET 2018



> On Jan 8, 2018, at 5:58 PM, Sven Barth via fpc-pascal <fpc-pascal at lists.freepascal.org> wrote:
> 
> FPC essentially reparses a generic during specialization so I'd say that they definitely affect compile times.

Does c++  not “specialize” in one location like FPC? looking at c++ code I often see things like Vector<x> used in multiple locations instead of declaring a single type (I have no idea why they would do that but it’s very common). Maybe that’s why compile times are so slow?

In one instance I did something similar but hopefully it “unfolds” only once when the unit compiles. Is that true?

type
	generic TStaticArray<T> = class (TObject)
	end;

type
	generic TDynamicArray<T> = class (specialize TStaticArray<T>)
	end;

type
	generic TGenericArray<T> = class (specialize TDynamicArray<T>)
	end;

type
	TIntegerArray = specialize TGenericArray<Integer>;
	TLongIntArray = specialize TGenericArray<LongInt>;
	TStringArray = specialize TGenericArray<String>;
	TSingleArray = specialize TGenericArray<Single>;
	TDoubleArray = specialize TGenericArray<Double>;
	TFloatArray = specialize TGenericArray<TFloat>;
	TPointerArray = specialize TGenericArray<Pointer>;

Regards,
	Ryan Joseph




More information about the fpc-pascal mailing list