- PR -

namespaceの独自定義について

1
投稿者投稿内容
会議室デビュー日: 2004/11/14
投稿数: 14
投稿日時: 2005-01-25 22:09
VC++.NET において名前空間を独自に定義する
方法、特に2、3の階層(?)になったもの
に対する方法をご教示ください。

namespace A { namespace B { namespace C {
public __gc class MyClass
...
}}}
というやり方になるのでしょうか?
ただこれをFormに対してやると、
デザイナでフォームのビジュアルな編集が
できなくなってしまいます。
見当違い、ご容赦ください。よろしくお願い致します。
会議室デビュー日: 2004/11/14
投稿数: 14
投稿日時: 2005-01-28 09:31
再問合せ(補足説明)をさせて頂きます。
未だ .NET 見習中で是非、情報を頂ければと思っております。

実現したいことは、
・複数のアプリケーションを通じて系統立った名前空間を
 定義したい、ということで、
 .NET Framework SDK ドキュメント−「名前空間の名前付け
 のガイドライン」に示されているように、
 CompanyName.TechonologyName[.Feature][.Design]
 といった書式で、独自の(自社用の)名前空間を設けたい
 ものです。
・別の言い方で申しますと、各アプリケーションにおいて
 “ルート名前空間”を定義したいものです。

質問としては、VC++.NET において
・namespace A { namespace B { namespace C {
  public __gc class MyClass
  ...
 }}}
 という記述により上を実現することが適当かどうか。
 (他に方法があるかどうか)
・Windowsフォームアプリケーションプロジェクトを生成した
 際に、標準で作成される Form1.h に対して、上の書式を
 適用すると、フォームデザイナでの編集が出来なくなる
 ことをどのように解決したら良いか。
・そもそも名前空間定義に関する全般的な理解を誤って
 いないかどうか。
といったところです。

また今時点で私の把握している状況として、

[VB.NET の場合]

Namespace ステートメントを多重に用いる方法は試して
いないのですが、VB.NET の場合はそもそも、プロジェクト
のプロパティにて“ルート名前空間”が定義できるので、
本質問にあたらず、独自の名前空間が定義できます。

[VC#.NET の場合]

VC++.NET では、namespace 宣言文にて
namespace A::B { ...
が出来ない様子(?) ですが、
VC#.NET では namespace A.B {...
ができるようで、さらに Form1.cs に
namespace A.B { namespace C { ...
といった書き方を加えても、
フォームデザイナは問題なく利用できます。

VC++.NET ではどのように対処すべきなのかを模索して
おります。ご教示よろしくお願い致します。
会議室デビュー日: 2004/11/14
投稿数: 14
投稿日時: 2005-01-28 13:33
以下のスレッド
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15019&forum=7
でも同様の質問が挙げられているのを検索してみて知りました。

とりあえず強引な実現策を考えてみましたのでご報告致します。
真っ当な方法とは思えないもので、
フォームデザイナの制約(?)をかいくぐる手でしかないのかなと思います。


1a. 別途ヘッダーファイル(仮に namespace_decl.h)を準備し、
 階層化したい名前空間の定義を、中身を空っぽで宣言する (以下の1行)
  namespace A { namespace B { namespace C {}}}

1b. 上記ヘッダファイルにて、名前空間のエイリアスを利用して
 "A::B::C" を意味するエイリアスを宣言する
namespace ABC = A::B::C;

2a. Form1.h 内の冒頭で、上のヘッダファイルをインクルード:
#include "namespace_decl.h"

2b. Form1.h 内の namespace は1階層のみとし、
 上のヘッダファイル内で定義したエイリアス名を利用する:
namespace ABC
{
public __gc class Form1 : public System::Windows::Forms::Form
{
...

“まともな”方法をご存知の方がおられましたら、
是非ご教示願いたいと思います。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2006-12-25 14:40
こんにちは。

このたび、VC++2005で開発しているのですが、本件と同様の問題にぶつかりました。
結局本件の対処方法はありましたでしょうか?ご存知の方おられませんか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-25 16:29
引用:

maruさんの書き込み (2006-12-25 14:40) より:

このたび、VC++2005で開発しているのですが、本件と同様の問題にぶつかりました。
結局本件の対処方法はありましたでしょうか?ご存知の方おられませんか?


ないと思います。
私は、クラス ライブラリ以外では、複合名前空間は使わないことにしています。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)