コンパイラ指令Includeの便利な使い方
|
54 |
UseInclude |
動作確認 |
Delphi2007 |
更新日 |
2008/01/30(水) |
Delphiにはテンプレートが無い(D2007時点)ので
別々な型に対しておなじソースコードで
操作をしようとすることは基本的に不可能です。
しかし、同じソースなのに別な型に対して
コピーペーストしてプログラム組むのはよくありません。
そこでコンパイラ指令のIncludeを上手く使って
ソースを共通化してしまいましょう。
DelphiのIncludeは単にファイルの内容を挿入するだけの機能しか
持ち合わせていません。(C++とは違うらしい)
Include指令を単独で使うと挿入部分ひとつに対して
1つのテキストファイルを指定しなければいけないので
ソースの一部だけを差し替えたい場合には
Includeするファイルが増えて大変になりますが
他のコンパイラ指令と組み合わせることで
かなり使えるようになります。
呼び出すソースを Unit1.pas
Includeされるテキストファイルを File1.txt
として、以下のように記述してみます。
Unit1.pas
{$define No1}
{$include File1.txt}
処理U1
{$define No2}
{$include File1.txt}
処理U2
{$define No3}
{$include File1.txt}
処理U3
File1.txt
{$ifdef No1}
{$undef No1}
処理F1
{$endif}
{$ifdef No2}
{$undef No2}
処理F2
{$endif}
{$ifdef No3}
{$undef No3}
処理F3
{$endif}
こうすることで、Unit1.pasは
処理F1
処理U1
処理F2
処理U2
処理F3
処理U3
このような動作を行うソースになります。
具体的に書くと以下のような記述が可能になります。
Unit1.pas
interface
uses xx,xx;
{$define interface}
{$include File1.txt}
implementation
{$define implementation}
{$include File1.txt}
end.
File1.txt
{$ifdef interface}
{$undef interface}
type
TA = class(TObject)
private
procedure MyMethod;
end;
{$endif}
{$ifdef implementation}
{$undef implementation}
procedure TA.MyMethod;
begin
//...
end;
{$endif}
────────────────────
参考────────────────────
TemplateList
http://delfusa.main.jp/delfusafloor/opensource/delfusalibrary/20070828160200/TemplateList/index.html
様々な型に対するTListを作成したサンプル
例えばRectList.pasやPointList.pasをみると
非常に短いソースコードでRect型やPoint型のListを作成出来ることがわかる。
RecordList.inc.pasでソースを共通化している。
|