2014-03-13 45 views
6

如果我有一個模板類中定義爲:如何單獨的定義和兒童模板類的聲明

#ifndef A_HPP 
#define A_HPP 

template<class T> 
class A 
{ 
public: 
    int doSomething(int in, bool useFirst); 

private: 
    template<int CNT> 
    class B 
    { 
    public: 
    int doSomething(int in); 
    }; 

    B<2> first; 
    B<3> second; 
}; 

#include "a_imp.hpp" 

#endif 

現在,我可以去了解其在實現頭文件A::doSomething的聲明這樣

#ifndef A_IMP_HPP 
#define A_IMP_HPP 

template<class T> 
int A<T>::doSomething(int in, bool useFirst) 
{ 
    if (useFirst) 
    return first.doSomething(in); 
    return second.doSomething(in);  
} 

#endif 

但是我不知道我是如何去做兒童類的方法的聲明。是否甚至有可能或者我必須做其他兩種方法之一,我可以想到這樣做,即定義主標題中的方法或聲明A以外的類。

請注意,我使用C++ 11,所以如果這只是可行的,它仍然適用於我,儘管C++ 98解決方案對其他人很有用。

回答

4

不知道這是你在問什麼,但我想你需要的東西是這樣的:

template<class T> 
template<int CNT> 
int A<T>::B<CNT>::doSomething(int in) 
{ 
    return /*...*/; 
} 

注意, template關鍵字出現兩次,第一次爲模板參數A,然後爲嵌套類B的參數。

6

你可以做到這一點通過以下方式:

template <class T> 
template <int CNT> 
int A<T>::B<CNT>::doSomething(int in) 
{ 
    // do something 
} 
相關問題