2012-05-04 60 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,很高兴我可以帮助:) –