[cppll:0067] <tips>Demi

Subject:
[cppll:0067] <tips>Demi
From:
Wraith the Trickster <wraith@...>
Date:
Wed, 12 Dec 2001 12:30:18 +0900
X-Mailer:
Microsoft Outlook Express 5.50.4807.1700
Message-Id:
<005301c182bd$5be2bae0$2fee12d3@mist>
道化師です。

それ自身は全然大したことはないけれど、幅広く応用の利くクラステ
ンプレートをご紹介いたしますー。

template<class T> class Demi {
 public:
   T Value;

   Demi() {}
   Demi(const T &X) :Value(X) {}

   operator T& () { return Value; }
   const operator T& () const { return Value; }

   T * operator & () { return &Value; }
   const T * operator & () const { return &Value; }
};

....なんのことはないただテンプレート引数で指定されたクラスをラッ
プするだけのクラステンプレートですが以下のようにいろいろ使える
です。


1. ダミーの引数。

// TreadID が欲しいだけで、ProcessId なんかいらないんだもん。
DWORD TreadID = GetWindowThreadProcessId(hWnd, &Demi<DWORD>());

# まぁ、GetWindowThreadProcessId の場合は単に NULL を指定す
# りゃ済む話だけど。この手の奴で引数を省略できない奴をいま思い
# 出せなかったんで。


2. クラステンプレートので生成されるクラスの基底クラスに native
  な型を使用したい場合。

template<class T> class Hoge :public T {
 ...
};

Hoge< Demi<int> > HogeInt;


3. 同じ型をオーバーロードなんかの都合で別の型として認識させる。

template<class T, class X = Demi<T> > class Hoge {
 ...
 void SetValue(T value) {...}
 void SetValue(X value) {...}
};


....等々、工夫次第でいくらでも大活躍してくれます。

□■□■                  Wraith the Trickster                  □■□■
■□■□ 〜I'll go with heaven's advantage and fool's wisdom.〜 ■□■□

スレッド

Navigation

検索

[検索ヘルプ]

Maintener: Tietew <www.tietew.jp>
Powered by Ruby on Rails, Mongrel, PostgreSQL, and Hyper Estraier.
click here