DelFusa Blog 総本山

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

NEW | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

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

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

≫ EDIT

レコード型初期化、簡単に書いてみました。


     ∧,,∧   ___  
    ミ,,゚Д゚ミ .||::::::::||   書いて
    ミ   つ___||_____|| 
   | ̄ ̄|__ミ―――――
   `ー┬‐''
     ┴   みますた

FillCharを使って
FillChar(Record1, SizeOf(Record1), 0);
もしくはFillChar(Record1, SizeOf(TRecord), 0);
、これが楽かな。

Record初期化で、これを毎度書くのは手間。

Record1だけを引数指定した初期化処理がやりたい!

Initialize(Record1)とか書きたい。


FillCharから、3番目の引数であるゼロを消して新しい関数を書くことはできるが、
2番目の引数を消すのは無理なのかな。

引き渡したレコード型からサイズはわかるはずだが
ポインタ渡しでなんのレコードを渡したかわからないな.....

高度なレコード型を使えば楽ちんなのだが~

ということで、書いておきました。

レコード型の初期化
http://delfusa.main.jp/delfusafloor/technic/technic/053_RecordInitialize.html


…でも、TRectとかあるからFillCharかInitializeRecordとか使った方が
 書き方が統一されて無難かな。

TRectにクラスヘルパー使おうと思ったけど
クラスじゃないからダメだってさ。

コンパイラさんにおこられちゃったよ。

スポンサーサイト

| 未分類 | 00:19 | comments:3 | trackbacks:0 | TOP↑

COMMENT

ツッコミが二箇所あります。
レコード型のメンバー変数は初期値が不定と書いてありますが、正しくはローカル変数として指定した場合だけです。
グローバルで宣言した場合やクラスのメンバの場合は初期化されます。
もうひとつはレコードのメンバにメモリが自動管理される型が含まれていた場合、その方法はバグを引き起こします。

| ななし | 2008/02/01 23:07 | URL | ≫ EDIT

こんにちは。

そうなんですか。初期値が安定してたり不定だったりと、なかなか変わったところがありますね。常に初期値指定して宣言できる仕組みがあればいいのにと思いますが・・・

> もうひとつはレコードのメンバにメモリが自動管理される型が含まれていた場合、その方法はバグを引き起こします。

ちょっと具体的なコードがわかりませんが、また気が向いたら教えてくださいな。

読んでいただいてありがとうございます。

| ミ・д・彡 | 2008/02/02 18:04 | URL | ≫ EDIT

Delphi 2009 専用ですが

事前準備
RecordUtils = class
public
class function Null<T>(): T;
end;

class function RecordUtils.Null<T>(): T;
begin
FillChar(Result, SizeOf(Result), 0);
end;

実際に使用
RecordUtils.Null<TRecordType>()

| C-yan | 2009/04/27 16:23 | URL | ≫ EDIT















非公開コメント

TRACKBACK URL

http://delfusa.blog65.fc2.com/tb.php/113-cf199c56

TRACKBACK

PREV | PAGE-SELECT | NEXT

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