名前空間に関する注意点

名前空間に関する注意点です。

1. ヘッダファイルでの名前空間

Delphiでは、ファイル名とユニット名が同じでなくてはなりません。そして、ユニット名は、名前空間の識別子として機能します。例えば、"SysUtils.pas"で宣言されている"IntToStr"関数の完全装飾名は、"SysUtils.IntToStr"となります。

VCLのC++Builder用ヘッダファイルは、それと互換性を取るような構成をしています。例えば、次のようになっています。

namespace Sysutils
{
// 各種の宣言と定義
}
using namespace Sysutils;
拡張子が"pas"のファイルをコンパイルすることで得られるヘッダファイルは、いずれも先の構成をしています。ヘッダファイルでusing指令を使うことは、一般的に言われる、C++の作法に反します。しかし、Delphiでは、標準として、名前空間の識別子を省略することができます。このusing指令は、それをエミュレートするものだと考えられます。

2. ソースファイルでの名前空間

ユニットを初めて、もしくは別名で保存する時、ソースファイルで宣言された名前空間の識別子は、イニシャルのみ大文字、他は小文字、という規則で変形されます。例えば、次のようになります。

"namespace MySysUtils" => "namespace Mysysutils"
意図しない識別子を残さないように、注意が必要です。

3. フォームユニットと名前空間

プロジェクトに含まれるファイルの名前と、フォームユニットの名前は、識別子として重複することが許されていません。例えば、"Form1.h"と"TForm1* Form1"はどちらも"Form1"という識別子を持つことになります。この場合は、"Form1Unit.h"と"TForm1* Form1"のようにして、別の識別子を与えなければなりません。

また、ライブラリとして別途にコンパイルされたフォームユニットであっても、プロジェクト内でユニークな識別子を持っていないと、リンク時にエラーとなります。
 

最終更新: 2008-07-08

戻る