クラス関数の宣言と定義の両方で、クラスのテンプレートパラメータに基づいてtypedef
を使用するにはどうすればよいですか?クラスの外部スコープのtemplate-patameterに基づく
私のクラスがあるとします
template<class T>
class A
{
typedef T::T1 X;
typedef T::T2 Y;
X& f1(Y& y);
Y& f2(Y& y);
// More declarations
};
ので定義で、私は書くことができません。
typedef typename T::T1 X;
typedef typename T::T2 Y;
template<class T>
X& A<T>::f1(Y& y) {...}
template<class T>
Y& A<T>::f2(Y& y) {...}
を(私の場合はT
がMaxSimplePathVertex<VertexType<VertexIDType>>
ある、と私は3つの以上のtypedefがあり、とても面倒です)。
私はすべてのtypedefをに複製することができますが、それぞれの機能定義はですが、それは優雅な解決策のようには見えません。
もちろん、私は#define X T1
を行うことができますが、普通はそのようなものには#define
を使用することをお勧めします。
だから最高の解決策は何ですか?
X =型名MaxSimplePathVertex> :: Xを使用して 'テンプレート;'?あるいは、 '自動A :: f1(Y&y) - > X&{...}' –
['typename A :: X'](http://ideone.com/mASNyY)は面倒ですか? (わずかに関連しています、あなたの例では 'typename'sがありません)。私は完全に問題を完全に誤解している可能性があります。 –
WhozCraig
@WhozCraig、ありがとう、私は間違った情報を修正した、 しかし、私はあなたが提案したものをどこに書くべきか本当に理解していない。 –