C++ で typename キーワードがどのように使用されているかについてのこの素晴らしい要約を読みました: http://pages.cs.wisc.edu/~driscoll/typename.html
それでも私は特定の例について疑問に思います:
template<typename T> class Outer{
public:
class Inner1{
T t;
};
class Inner2{
int t;
};
};
template<typename T> void foobar(void)
{
std::list<Outer<T>::Inner1> l;
}
上記のリンクのテキストから、私が必要であることを理解しています
std::list<typename Outer<T>::Inner1> l;
Inner1 は修飾されており、依存しているためです。
しかし: Inner2 には、私を混乱させる型名も必要です: まず、Inner2 が型であることは明らかです (まあ、Inner1 については既に明らかです)。次に、Inner2 は T にまったく依存しません。すべての可能な T について、Inner2 は同じ (タイプ) になります。
テンプレート内から修飾型を使用するとすぐに typedef が必要ですか? テンプレートパラメータに依存するかどうか?