2014-03-13 42 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 
} 
相关问题