Jump to content

Eugine Savin

Members
  • Content Count

    11
  • Joined

  • Last visited

Community Reputation

1 Neutral
  1. Eugine Savin

    Generic Drawing Engine

    class function TNumbers.FromInteger<T>(AValue: Integer): T; type PSingle = ^Single; begin if TypeInfo(T) = TypeInfo(Single) then PSingle(@Result)^ := AValue else if TypeInfo(T) = TypeInfo(Integer) then PInteger(@Result)^ := AValue else raise Exception.Create('Error Message'); end;
  2. Eugine Savin

    Generic Drawing Engine

    type TNumbers = class public class function One<T>: T; end; { TNumbers } const OneSingle: Single = 1; OneInteger: Integer = 1; class function TNumbers.One<T>: T; type PT = ^T; begin if TypeInfo(T) = TypeInfo(Single) then Result := PT(@OneSingle)^ else if TypeInfo(T) = TypeInfo(Integer) then Result := PT(@OneInteger)^ else raise Exception.Create('Error Message'); end; ... FPen.Width := TNumbers.One<T>;
  3. https://bitbucket.org/sglienke/spring4d/src/ffee3360a2e8cb9ae5311621a745bb9ed809870f/Source/Base/Spring.pas#lines-956 ?
  4. Eugine Savin

    Generic class

    This shouldn't work. Make method Test virtual and override it in Test2
  5. Eugine Savin

    operator overloding Equal vs Multiply

    In C++ there is not differences between functions and overloaded operators. struct MyArray { public: template <std::size_t N> bool operator==(int (&rhs)[N]) { std::cout << N << '\n'; return true; } }; int main() { // your code goes here int arr1 [1] = {0}; int arr2 [2] = {0, 0}; MyArray myArr; if (myArr == arr1 && myArr == arr2) {} return 0; } Can you explain why you allow operators with dyn arrays, and do not allow ones with open arrays ?
  6. Eugine Savin

    operator overloding Equal vs Multiply

    TMyArray = record .. end; const Arr1: array[0..1] of Integer = (..) const Arr2: array[0..2] of Integer = (..) var MyArray: TMyArray .. I wanna have ability to compare if (MyArray == Arr1) or (MyArray = Arr2).. How can I get it without open arrays as operator parameters ?
  7. Eugine Savin

    operator overloding Equal vs Multiply

    What's problems with open arrays ? Anyway if I replace "array of Integer" by "TArray<Double>" r * [10.0] - compiled, but r = [10.0] is not ( E2001 Ordinal type required) // qc link https://quality.embarcadero.com/browse/RSP-23498
  8. Eugine Savin

    operator overloding Equal vs Multiply

    And main question, why r := r * [10] // here [10] is array and b := r = [10] // here [10] is set what's difference ??
  9. Eugine Savin

    operator overloding Equal vs Multiply

    Well, where is not "set of Integer", but code var i: Integer; begin i := 10; b := r = [i]; end is not compiled
  10. Simple question, why "Multiply" operator works, and "Equal" does not. compiler give error "[dcc32 Error] Project1.dpr(33): E2015 Operator not applicable to this operand type" program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type TMyRecord2 = record public class operator Equal(const a: TMyRecord2; const b: array of Integer): boolean; class operator Multiply(const a: TMyRecord2; const b: array of Integer): TMyRecord2; end; class operator TMyRecord2.Equal(const a: TMyRecord2; const b: array of Integer): boolean; begin Result := True; end; class operator TMyRecord2.Multiply(const a: TMyRecord2; const b: array of Integer): TMyRecord2; begin Result := a; end; var b: boolean; r: TMyRecord2; begin try r := r * [10]; // this line is compiled b := r = [10]; // this line is not compiled except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
×