2017-05-03 9 views
2

私は外側と内側の2つのテンプレートクラスを持っています。私は他の内部クラスオブジェクトからインナークラスに型キャストしています。コンパイルエラーです。これを解決するには?内部テンプレートクラスのreinterpret castの使い方は?

あなたが欲しい
template<typename O> 
struct outer 
{ 
    template<typename I> 
     struct inner 
     { 
     }; 

    inner<int> *ptr; 
    outer(); 

}; 

    template<typename O,typename I> 
void callme() 
{ 
    reinterpret_cast< outer<O>::inner<I> *>(NULL); 
} 

答えて

4

reinterpret_cast<typename outer<O>::template inner<I> *>(nullptr); 
//    ^^^^^^^^   ^^^^^^^^    ^^^^^^^ 

outerinnerは依存名(彼らはテンプレート引数に依存)であり、したがって、あなたが明示的に彼らの「種類」(値、タイプ、テンプレートを指定する必要があります)。

+0

素晴らしい。なぜ、テンプレート内のテンプレートにテンプレートを配置する必要がありますか? –

+1

'inner'は従属名であるため、その種類を明確にする必要があります。 –