Hi,
I have the following (I don't yet know whether this is only pseudo-code to demonstrate what I mean (I have clearly done too much Python during the last year) or whether something like this or similar would actually work, I haven't tested it yet, although it compiles without errors), or whether this is complete nonsense:
implementationconst
MsgTypes : array[0..1] of class of Tp2pMessage = ( Tp2pMessageVersion,
Tp2pMessageGetdata
); // this will be a lot more classes laterand later i have the following:
procedure TPeer.ProcessMessage;
var
Msg : Tp2pMessage;
TMsg : class of Tp2pMessage;
...
begin
...
for TMsg in MsgTypes do begin
if Header.Command = TMsg.GetCommand then begin
Msg := TMsg.Create(Buffer, Header.Length);
Msg.Parse;
Msg.Process;
break;
end;
end;(GetCommand is a class function).
I cannot use this syntax at all because Lazarus is not happy with with my array declaration and codetools will only give me the followin error whenever I use autocompletion:
"test.pas(42,35) Error: procedure or function or constructor ordestructor expected, but of found"
and the cursor is pointing to the second "of" in my array declaration.
Now the question: Is this all complete nonsense what I am trying here and I am using it wrong or am trying to over-engineer a simple thing? I'm trying to avoid a spaghetti-like monster-if from hell and want most of the things that the received messages would do actually let the messages do it themselves.
is there any possible variation of this design pattern so that Lazarus will not complain (I haven't actually tested whether the above even works because some parts are still missing but at least it seems to compile with FPC 2.5.1.
Bernd
