2014-02-21 61 views
1

我创建了一个实现各种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

你确定你需要实现方法两次?第一次执行有什么问题? – smac89

+0

第一次执行没有错,但我认为它不能覆盖第二种情况,即“信号”是T的复向量,而“过滤器”是T的向量。 –

回答

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); 
+1

另一个不需要C + +11或boost就是制作'template vector 卷积(vector signal,vector filter);'private,然后从(非模板化)公共重载函数中调用该模板。 – IdeaHat

+0

谢谢。这正是我需要的。 –

相关问题