私は Delphi XE、Windows 7 で作業しています。
アプリケーションで、ユーザーが選択できるさまざまなレポート タイプを有効にしたいと考えています。これを行うために、1 つのベース レポート クラスと、レポート タイプ (xml、csv、ppt など) ごとに 1 つのサブクラスがあります。
{Just an illustrating example}
TBaseReport = class
public
constructor Create;
procedure GenerateReport; virtual; abstract;
class function ReportType: string; virtual; abstract;
end;
T*Report = class(TBaseReport);
//Etcetera.
私がやりたいことは、Rtti を使用してすべてのレポート クラスを検出し、それらの ReportType を一覧表示することです。その後、Rtti を使用して、選択したレポート クラスのインスタンスを作成し、GenerateReport を呼び出します。全体として、これを達成するのはそれほど難しくありません。
ただし、大きな欠点があります。降順クラスの使用をハードコーディングすることは決してないため、コードが実行可能ファイルに含まれません。
リンカー/コンパイラにこれらのクラスを強制的に含める適切な方法はありますか?
(醜い)回避策は、初期化セクションでレポートの使用をシミュレートすることですが、私はむしろそれをしたくありません。より良い解決策は、基本クラスを永続化し、'RegisterClass(T*Report);' を呼び出すことです。初期化セクションにあります。それは機能しますが、それらを永続化する必要があるとは思わないので、繰り返しますが、それはしたくありません。一方で、これしか方法がないのではないでしょうか?
前もって感謝します。