週に一回は書きますよ 月に4つ記事を書けばノルマは満たされます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

mplを理解しようとして自作でTListを書いてみました。

template<typename CAR_, typename CDR_>
class TList {
public:
  typedef CAR_ car;
  typedef CDR_ cdr;
};

class NullType {
};

template<int N>
class IntType {
public:
  enum {value = N};
};

template<int n, int m> class ListByRange;
template<bool b, int n, int m> class ListByRangeWrap;

template<int n, int m>
class ListByRange {
public:
  typedef typename ListByRangeWrap<m == n, n, m>::type type;
};

template<int n, int m>
class ListByRangeWrap<false, n, m> {
public:
  typedef typename TList<IntType<n>,  // 34
			 typename ListByRange <n + 1, m>::type> type; //35
};

template<int n, int m>
class ListByRangeWrap<true, n, m> {
public:
  typedef NullType type;
};

これに対して次のエラーが出ます。34行と35行は上にコメントを書きました。

tlist.h:34: error: expected nested-name-specifier
tlist.h:35: error: invalid declarator before ‘type’

これ何だったかしら。全然思い出せないのであとで調べます。ちなみに当該行の型全ての手前に::を付けても無駄でした。

スポンサーサイト
コメント
この記事へのコメント
typename は foo<...>::bar が型名なことを表すものなので
 typedef typename TList<...> type;
のようにTListの内部型じゃなくてTListそのものをtypedefする場合はtypename要らないんじゃないでしょーか
2009/04/13(月) 06:56 | URL | k.inaba #-[ 編集]
うお、正解でした。ありがとうございます。
たしかにTList自体は何が引数になっていてもtypeであることは自明ですね。さらにそもそもtypename付けすぎというerrorが出ることを知りませんでした。
2009/04/13(月) 08:17 | URL | Gus #-[ 編集]
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://gusmachine.blog49.fc2.com/tb.php/437-2de2e455
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。