如果我将模板类定义为:
#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解决方案对其他人有好处。
答案 0 :(得分:6)
您可以通过以下方式完成此操作:
template <class T>
template <int CNT>
int A<T>::B<CNT>::doSomething(int in)
{
// do something
}
答案 1 :(得分:4)
不确定这是否是您要求的,但我想您需要这样的事情:
template<class T>
template<int CNT>
int A<T>::B<CNT>::doSomething(int in)
{
return /*...*/;
}
请注意,template
关键字出现两次,首先是A
的模板参数,然后是嵌套类B
的参数。