On Wed, 30 Oct 2013, Sven Barth wrote:

Am 30.10.2013 08:47, schrieb Xiangrong Fang:
      Hi All,

      I have the following class:

      type
        generic TVector<T> = class
        private type
          TDataType = array of T;
        private
          FData: TDataType;
          ... ...
        public
          ... ...
          function Slice(APos: Integer = -1; ACount: Integer = -1): TDataType;
        end;

The Slice() method return a portion of the data as a dynamic array.

My question is, as I define TDataType as PRIVATE type, why it is still usable 
outside of the class?  In the main program
I did:

type
  TIntVector = specialize TVector<Integer>;
var
  iv: TIntVector;
  ia: array of Integer;
begin
  iv := TIntVector.Create;
  ... ...
  ia := iv.Slice;
end.

This will assign a TDataType (is it TVector$TDataType or TIntVector$TDataType? I don't 
know) to an "array of Integer".
Why this assignment works? 

i.e. how does the type system work?!

It's a bit annoying that the usage private/protected types in public/published 
functions is allowed... (this is however Delphi
compatible) Maybe this should be adjusted for non-Delphi modes for language 
consistency... (maybe at least as a warning which
could be elevated to an error if someone wants)

I think it is an error. You declare something as private, and then you use it in a public function ? If that is not a visibility clash, I don't know what is :)

Michael.
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to