我创建了一个实现各种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);
};
我认为即使它们内部具有完全相同的代码,也无法两次声明和实现方法。有没有一种聪明的方法可以避免复制和粘贴整个方法实现?
答案 0 :(得分:1)
看到你已经有了模板,为什么不把这些功能变成功能模板呢?
template <class T>
class DspAlgorithms {
public:
DspAlgorithms();
template <class U>
vector<U> Convolve(vector<U> signal, vector<T> filter);
};
如果您希望仅使用T
和complex<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);