0
非テンプレートクラスの内部クラスの存在を必要とします。テンプレート機能は<em>インナー</em>という名前の内部クラスを持っているために、そのテンプレートパラメータタイプ<em>T</em>を必要とテンプレート関数</em> F <em>あります
内側fクラスT :: Innerがインスタンス化されます。
最初に試してください。
//
// "error: need 'typename' before 'T:: Inner' because 'T' is a dependent scope"
//
template <typename T>
void f(void)
{
T::Inner i;
}
私はので、ここで私が間違って何を得ることはありません2回目の試行は、来る、ということを得る:
/// "error: expected ';' before 'i'
template<typename T>
void f (void)
{
typename T::Inner I;
I i;
}
それはなぜですか?
インナーはタイプとして宣言されています。 テンプレートはまだインスタンス化されていません。 タイプインナーが存在するかどうかは、まずインスタンス化の となります。どこが間違っていますか?私はあなたが疑問に持っているものに対し、
typename T::Inner i;
または
typedef typename T::Inner I;
I i;
をしたいと思います
作品!どうもありがとうございました。 – elrat
代わりに 'I = typename T :: Inner;'を使っています。そして、btw、IMOのtypenameは 'using'文のRHSには必要ではありません。あなたが持つことができるのは型だけです(あるいは、' decltype'の一部であればコンパイラにとっても明らかですRHSが何であるか)。 – vsoftco
@vsoftco紙を書いて[email protected]に送付してください。 – Brian