大型模板类样板代码

时间:2015-10-21 20:44:15

标签: c++ templates dry

我有大型模板类,有多种方法等。

大多数方法都不使用模板参数 - 只有少数方法使用模板参数。

有没有办法最小化样板代码?

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>(在我的实际代码模板定义中更大)?

2 个答案:

答案 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种类型是可能的,并且必须事先做出决定。