16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"複数の派生クラスを配列で扱う"
この発言に対し以下のコメントが寄せられています
#00533 TN さん RE:クラス参照型変数をリストで持つ
#00539 アイクビー さん RE:クラス参照型変数をリストで持つ
みなさん、こんばんは。
複数の種類のスレッドを扱う場合などには、それぞれのTThreadから派生した
クラスの型をを配列に格納しておきたいものです。そのためには、クラスの型を
変数や定数のように扱わないといけませんが、ちょうど、
TApplication.CreateFormが引数として扱っていたのでソースを探ってみました。
会社で必要があったので実験してみたのですが、理論はわからいものの、正し
く動作しましたので、参考にしてください。コードははっきり覚えていないので、
多少間違えているかもしれません。以下は単純な例です。
type
TThreadClass = class of TThread;
TThread1 = class(TThread)
public
procedure Execute; override;
end;
TThread2 = class(TThread)
...
...
const
N = ...
fTHREAD_CLASSESS: array[0..N] of TThreadClass = (
TThread1, TThread2, ...
);
procedure TThread1.Execute;
begin
...
end;
procedure TThread2.Execute;
...
...
procedure MainThread;
var
f: array[0..N] of TThread;
i: Integer;
begin
for i := 0 to N do begin
f[i] := TThread(fTHREAD_CLASSES[i].NewInstance());
f[i].Create(True);
end;
...
for i := to N do begin
f[i].Free();
end;
end;
この場合のようにTThread.Createをいぢってない場合うまくいくのですが、派
生クラスのCreateの引数の数や型が合わないとコンパイルできませんでした。引
数が同じならうまくいくかどうかは試していないのでわかりません。
アイクビー
Original document by アイクビー 氏 ID:(KHB01350)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|