おいふぉりーのぶろぐ

きっと趣味のブログに違いないです!!

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

[MFC]テンプレート コレクション クラスのキーや値の型を知る

今更ながら Visual C++ 2008 で MFC を使っているのですが. ががが. 一応, Feature Packというのも出ましたしぃ~. 他のライブラリを色々使った後, MFC 初心者になった者としては色々としっくりこなかったりですが. ががが.

さて, 本題ですが
template <class Collection> void Foo(Collection &c);
というテンプレートなコードを書いて, 引数には CMap<ほにゃらら>型の値を渡すことを考えます.

このとき, Foo() 関数を実装する上で Collection のキーの型や値の型が知りたいのですが, CMap クラスには STL コンテナの value_type メンバのような定義がありません. さてどうやって, キーや値の型を知ればよいのでしょうか?

解決法は次のようになります.

template <class Map>
struct KeyOfMap
{
typedef void Type;
};

template <class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
struct KeyOfMap<CMap<KEY, ARG_KEY, VALUE, ARG_VALUE> >
{
typedef KEY Type;
};

上記のコードを用意しておいて, typename KeyOfMap<Collection>::Type でキーの型を知ることができます. 値の型も同じ要領で知ることができます.

次のコードで動作チェックもしてみました.
typedef CMap<int, int &, int, int &> CIntMap;
typedef CMap<CString, LPCTSTR, int, int &> CStringMap;
MessageBoxA(hWnd, typeid(KeyOfMap<CIntMap>::Type).name(), "Key type of CIntMap", MB_OK);
MessageBoxA(hWnd, typeid(KeyOfMap<CStringMap>::Type).name(), "Key type of CStringMap", MB_OK);
スポンサーサイト
  1. 2009/12/30(水) 03:22:44|
  2. ソフトウェア開発
  3. | トラックバック:0
  4. | コメント:0
次のページ

来客数

プロフィール

Euphorie

Author:Euphorie
"おいふぉりー"って呼んでくださいな☆
ハードウェアとかソフトウェアとかの開発に興味があったり。。。
連絡先は上の画像。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

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