DelFusa Blog 総本山

プログラミングの話題とかです。

NEW | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

| スポンサー広告 | --:-- | comments(-) | trackbacks(-) | TOP↑

≫ EDIT

Includeの便利な使い方

どっかで教えていただいたのですが、どこで教えてもらったかは忘れたというか、多分2chでしょう。勉強させていただいております。
m(._.)m ペコッ


◆Includeの便利な使い方

DelphiにはC++でいうところのテンプレートという仕組みが無いので別々な型に対しておなじソースコードで操作をしようとしても基本的には無理です。

※.NET(2.0か?)にはGenericsとかあるらしいですが、よくわかりません。

しかし、同じソースコードを別な型に対してコピーペーストしてプログラム組むのは、大変いやになります。

そこで、Includeを上手に使ってソースを共通化してしまいましょう。

DelphiのIncludeはコンパイラ指令として、単にテキストファイルを挿入するだけの機能しか持ち合わせていません。おまけに使うとIDEがいまひとつ、挙動不審な感じになって、落ちたりはしませんが(D2006)コード補完、リファクタリングがチョーット動かなくなったりします。見なかったことにしてやってください。

こんな風に使います。

呼び出すソースを Unit1.pas
Includeされるテキストファイルを File1.inc.pas
として、以下のように記述してみます。

───────(Unit1.pas)───────
…前略…

//ここに処理1が挿入される
{$define No1}
{$include File1.inc.pas}

//ここに処理2が挿入される
{$define No2}
{$include File1.inc.pas}

//ここに処理3が挿入される
{$define No3}
{$include File1.inc.pas}

…後略…
───────(File1.inc.pas)───────

{$ifdef No1}
{$undef No1}

…処理1…

{$endif}

{$ifdef No2}
{$undef No2}

…処理2…

{$endif}

{$ifdef No3}
{$undef No3}

…処理3…

{$endif}
────────────────────

こうしておくと、Unit1.pasには、処理1,2,3の内容が挿入されることになり、ひとつのFile1.inc.pasを用意することで複数の挿入部分を記述することができます。

もう少し具体的に書いておくと以下のような記述が可能になります。

───────(Unit1.pas)───────

interface

uses xx,xx;

{$define interface}
{$include File1.inc.pas}

implementation

{$define implementation}
{$include File1.inc.pas}

end.

───────(File1.inc.pas)───────

{$ifdef interface}
{$undef interface}

type
 TA = class(TObject)
 private
  procedure MyMethod;
 end;

{$endif}

{$ifdef implementation}
{$undef implementation}

procedure TA.MyMethod;
begin
 //...
end;

{$endif}
────────────────────

活用してみてください。.....っていっても、難しいだろうなあ........


一応、例としてソースをアップしてみます。

TListから作ってみたレコード系のList、
Integer型リストやTPoint型、TRect型、Real型、String型、WideString型

また、TListから作ってみたクラス系のList、Stringクラス型、自作クラス型、

こんなソースをアップしてみます。

節操のないアップの仕方ですが、まあ、どうぞ。

.....usesに自作ライブラリばかりなので、絶対に動かないな、、、このソース、、、、このWideStringRecordListなんかはまるっきりTStringListの代わりになるので、俺的には非常に役に立つんだけど、すでに自作ライブラリ間の絡みが大きすぎて動くものを提供するということができなくなってしまってます.....
スポンサーサイト

| 未分類 | 23:28 | comments:1 | trackbacks:0 | TOP↑

COMMENT

で、「コンパイルできねーはず」と、記事には書きましたが、

記事後に、
DelFusaLibraryで、自作libraryは全部アップできましたので、コンパイルできるはずです。絶対デケル。



というコメントを、
MLで紹介されていたので補足してみました。

俺ってなかなかイヤラシイなあ。
(・∀・)ニヤニヤ

それにしても、StringList...まぢ、ありえねー。
改行コードとかちゃんと区分して所有してくれよ。このライブラリで例えばWinとLinux、Macで同等コードかけんのかよ。

ということで、

WideStringRecordListとか、StringRecordListとか、お勧め。(無理矢理)

| Delフサ | 2006/07/11 00:51 | URL |















非公開コメント

TRACKBACK URL

http://delfusa.blog65.fc2.com/tb.php/8-2370acdf

TRACKBACK

PREV | PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。