2017-05-03 118 views
2

我有兩個模板類作爲外部和內部。我是從其他內部類對象類型轉換爲內部類。我收到編譯錯誤。如何解決這個問題?如何使用reinterpret強制轉換爲內部模板類?

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

太好了。爲什麼我們需要將模板放在'template inner '中? –

+1

因爲'inner'是一個獨立的名字,所以你需要消除它的種類。 –