ここが厳しいよMinGW typename はどう付けるの?
どうも^^dです。
さて、開発環境を少しMinGWに移したわけですが・・・、何かと今まで作っていたライブラリdkutilの移植作業が難しい。
以下のようなクラスでのお話。
template<class MAP_T>
class map_ex_adapter : public MAP_T{
public:
typedef MAP_T base_type;
typedef map_ex_adapter<base_type> self_type;/// キーの型
typedef typename base_type::key_type key_type;
///データの型
typedef typename base_type::mapped_type mapped_type;
/// キーとデータのペア
typedef typename base_type::value_type value_type;
/// キーを比較するファンクションオブジェクト
typedef typename base_type::key_compare key_compare;
///allocator type
typedef typename base_type::allocator_type allocator_type;///value_typeのkey_typeが非const版
typedef std::pair<key_type,mapped_type> DATA_TYPE;typedef std::pair<base_type::iterator,bool> RESULT;
//typedef std::pair<bool,void *> GET_DATA;
typedef typename base_type::iterator iterator;
typedef typename base_type::const_iterator const_iterator;
typedef typename base_type::reverse_iterator reverse_iterator;
typedef typename base_type::const_reverse_iterator const_reverse_iterator;
public:
しっかりとエラーを吐いてくれるのだ。
to
in
parse
At
と、訳のわからないものをだ・・・。*1
さて、何処が間違っているだろうか?分かった人はやっぱり凄いですねぇ〜と、私は思っちゃいます。
今まで、クラス内のものをtypedef する時はそのまんまtypedefだった。
しかし、前前からtypenameをつけようつけようと思いつつ、つけていなかった。
事実、何処でつければいいのか分からなかった。
で、参考になったサイト カレー温泉
http://ray.sakura.ne.jp/
http://ray.sakura.ne.jp/template/typename.html
これによると、クラス内にある型をtypedefする時、宣言するときはtypenameをつけなさいとの事。(VCではテンプレートクラスでないクラスにtypedefする時typenameをつけると怒られるらしい)
そうだったんだ〜。
へーへーへぇ。*2
で、間違っているところは??
あ〜、なーるねぇ。
typedef std::pair< base_type::iterator,bool> RESULT;