我有大型模板类,有多种方法等。
大多数方法都不使用模板参数 - 只有少数方法使用模板参数。
有没有办法最小化样板代码?
template <class T>
class Something{
void method1();
void method2();
void method3();
};
template <class T>
void Something<T>::method1(){
T::use();
}
template <class T>
void Something<T>::method2(){
// do not use T at all, does not call method1()
}
template <class T>
void Something<T>::method3(){
// do not use T at all, does not call method1()
}
我可以避免任何方式template <class T>
(在我的实际代码模板定义中更大)?
答案 0 :(得分:3)
将非模板相关方法放在基类中。
class SomethingBase
{
protected:
void method2();
void method3();
};
template<typename T>
class Something
: SomethingBase
{
public:
void method1();
using SomethingBase::method2;
using SomethingBase::method3;
};
这不会改变班级的功能,但比Neil Kirk的方法更麻烦,如果适用的话,这应该是首选。
如果像这里一样,基础的唯一功能是为派生类提供不太专业化的功能,那么它的所有成员(包括构造函数)都应该是protected
。
答案 1 :(得分:1)
如果只有method1
使用模板参数,则只需模板化该函数。
class Something
{
template<class T>
void method1()
{
T::use();
}
void method2();
void method3();
};
请注意,这会稍微改变该类的功能。现在可以在method1
上使用各种类型调用实例,而之前只有1种类型是可能的,并且必须事先做出决定。