[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.〜 ■□■□
それ自身は全然大したことはないけれど、幅広く応用の利くクラステ
ンプレートをご紹介いたしますー。
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.〜 ■□■□
▼ スレッド
- 67: それ自身は全然大したことはないけれど、幅広く応用の利くクラステ ンプレートをご紹介いた Wraith the Trickster
- ├70: 挨拶だけだと寂しいので何か投稿したいと…使いまわしネタですが。 道化師さんが紹介されて mars
- └74: 皆さんのコード見させてもらってますが,理解できてない状態です. 読んでいるうちに頭から煙 Takashi Ayabe
- └75: いいねぇ、僕の目論見通りだ^^; あたまコネコネ cppll 暗黙的/明示的にかかわらず、Demi<T>からT& FUKUDA Fumiki
- └76: うーんっ! 型変換演算子だったんですか.C++を真剣に勉強しなくちゃ. const T * operator & () const { retu Takashi Ayabe
- └77: "Effective C++"の項目29 を読むべし。 FUKUDA (episteme) Fumiki -- magical, but never a magic... FUKUDA Fumiki
- └79: STL標準講座、大変役に立っております(≧∀≦) Effective C++ 改訂2版 : ISBN4-7561-1808-9 erebus‐at‐sirius.ocn.ne.jp
- └81: FUKUDA (episteme) Fumiki -- magical, but never a magic... FUKUDA Fumiki