具有不同参数但代码相同的模板类方法

时间:2014-02-21 14:19:47

标签: c++ oop templates

我创建了一个实现各种DSP算法的模板类。我刚开始遇到的一个问题是我想为实数和复数数据实现算法,但这意味着我必须实现两次方法,即使这些方法的主体完全相同。一个例子:

template <class T>
class DspAlgorithms {
public:
    DspAlgorithms();
    vector<T> Convolve(vector<T> signal, vector<T> filter);
    vector< complex<T> > Convolve(vector< complex<T> > signal, vector<T> filter);
};

我认为即使它们内部具有完全相同的代码,也无法两次声明和实现方法。有没有一种聪明的方法可以避免复制和粘贴整个方法实现?

1 个答案:

答案 0 :(得分:1)

看到你已经有了模板,为什么不把这些功能变成功能模板呢?

template <class T>
class DspAlgorithms {
public:
    DspAlgorithms();
    template <class U>
    vector<U> Convolve(vector<U> signal, vector<T> filter);
};

如果您希望仅使用Tcomplex<T>来限制函数可调用,则可以使用enable_if(C ++ 11或Boost):

template <class U>
vector<U> Convolve(vector<U> signal, vector<T> filter, typename enable_if<is_same<U, T>::value || is_same<U, complex<T> >::value>::type * = 0);