tgeneric5.pp 778 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. {$mode objfpc}
  2. uses
  3. typinfo;
  4. type
  5. generic TList<_T>=class(TObject)
  6. data : _T;
  7. procedure Add(item: _T);
  8. end;
  9. var
  10. err : boolean;
  11. procedure TList.Add(item: _T);
  12. var
  13. i : integer;
  14. p : pointer;
  15. begin
  16. i:=item;
  17. if item=i then;
  18. p:=typeinfo(_T);
  19. if p<>typeinfo(integer) then
  20. begin
  21. writeln('Typeinfo error');
  22. err:=true;
  23. end;
  24. if sizeof(item)<>4 then
  25. begin
  26. writeln('Sizeof error');
  27. err:=true;
  28. end;
  29. end;
  30. type
  31. TMyIntList = specialize TList<integer>;
  32. var
  33. ilist : TMyIntList;
  34. someInt : integer;
  35. begin
  36. someInt:=10;
  37. ilist := TMyIntList.Create;
  38. ilist.Add(someInt);
  39. writeln(ilist.data);
  40. if ilist.data<>10 then
  41. err:=true;
  42. if err then
  43. begin
  44. writeln('ERROR!');
  45. halt(1);
  46. end;
  47. end.