Hello, Consider this:
TSubClass1 = class(TSomeClass)...; TSubClass2 = class(TSomeClass)...; TSubClass1Vector = specialize TVector<TSubClass1>; TSubClass2Vector = specialize TVector<TSubClass2>; TSomeClassVector = specialize TVector<TSomeClass>; And I want to write a function like: procedure WriteVector_To_DM(ADest: TDataManager; ASelf: TSomeClassVector); procedure ReadVector_From_DM(AFrom: TDataManager; var ASelf: TSomeClassVector); So according to the compiler warnings this is impossible, and I need to write 3 functions to cover the 3 specializations, even if those functions would be identical. Which sucks, because in the real case I have like 10 nearly identical specializations, then I need 10 identical copy+pasted functions... of course I could use TSomeClassVector everywhere, but this negates the advantages of using generics in the first place which was type safety and elegancy. Of course I am not satisfied to copy+paste 10 times and maintain the copy+pasted mirrors in every change, so I simply wrote only 1 function for the base class and I call it like this: var myobj: TSubClass1Vector; begin .... ReadVector_From_DM(MyDM, TSomeClassVector(myobj)); Yes, I could write the read/write functions in the vector itself, but then the vector would need to know about TDataManager, which it is not supposed to know really :( The rationale here is that I only use functions from TSubClass1 that are in TSomeClass, and I can't see how it could go wrong, I understand that the compiler will generate 3 copies of the same code: 1 time for TSubClass1Vector, 1 time for TSubClass2Vector and another for TSomeClassVector. But all those copies should be fully compatible, considering that: A> The generic class cannot use anything specific from TSubClass1 since it doesn't know even that we are talking about a class, it could be an int B> All classes are equal sized pointers My conclusion is that doing what I am doing will work, and it can't possibly fail. Now I understand that some people will scream: DON'T DO THIS. But my question is: Is there any real reason why I am wrong and will fail in some future compiler version or something, or while not recommended I am correct that there is no real reason why it could possibly fail. Considering my points above? thanks, -- Felipe Monteiro de Carvalho _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal