2012-05-04 116 views
2

我有一個模板類內的模板類。我可以輕鬆地實現內聯成員函數,但在我的具體情況中,我遇到了前向聲明問題,因此在聲明後被迫實現它 - 並且我意識到我已經忘記了如何去做。實現嵌套的模板功能

如果這個小例子可以去編譯(不含移動高清在線)我的問題將得到解答:

#include <iostream> 

template <typename T, typename V> 
struct Outer { 

    template <int Count> 
    struct Inner { 
     void printer() const; 
    }; 

}; 

template <typename T, typename V, int Count> 
inline void Outer<T, V>::Inner<Count>::printer() const { 
    std::cout << "Oh hai. I'm inner<" << Count << ">" << std::endl; 
} 

int main() { 
    Outer<int, int>::Inner<3> i; 

    i.printer(); 

    return 0; 
} 

編輯:固定無關錯別字斯圖爾特修復(以幫助使答案更清晰)

+0

計數器→計數 – qdii

回答

2

以下編譯和g ++ 4.2.1爲我工作。 (它也與在線Comeau編譯器一起編譯,以瞭解它的價值)。關鍵更改是(a)正確地拼寫Outer,(b)分離出兩組模板參數,以及(c)將Counter更改爲Count

#include <iostream> 

template <typename T, typename V> 
struct Outer { 

    template <int Count> 
    struct Inner { 
     void printer() const; 
    }; 

}; 

template <typename T, typename V> 
template <int Count> 
void Outer<T, V>::Inner<Count>::printer() const { 
    std::cout << "Oh hai. I'm inner<" << Count << ">" << std::endl; 
} 

int main() { 
    Outer<int, int>::Inner<3> i; 

    i.printer(); 

    return 0; 
} 
+1

非常感謝!對不起,這些拼寫錯誤(當故意製作不能編譯的代碼時,有點難以注意) – Heptic

+0

沒有probs,很高興我可以幫助:) –