我正在尝试为通用数字类型创建一个简单的滚动平均值实现,但是遇到了绊脚石:
generic<typename T>
public ref class RollingMean
{
protected:
CircularBuffer<T> m_dataBuffer;
T m_currentSum;
public:
RollingMean(const int NumOfItems);
T AddItem(const T NewItem);
T CurrentMean()
{
return m_currentSum / static_cast<float>(m_dataBuffer.Length); // <--- gives me compiler error C2676
}
};
这给了我一个编译器错误:
1>c:\projects\util\RollingMean.h(21): error C2676: binary '/' : 'T' does not define this operator or a conversion to a type acceptable to the predefined operator
1>RollingMean.cpp(6): error C2955: 'MathHelpers::RollingMean' : use of class generic requires generic argument list
1> c:\projects\util\RollingMean.h(9) : see declaration of 'MathHelpers::RollingMean'
有没有办法将泛型类限制为对数值运算感到满意的类?
答案 0 :(得分:0)
使用泛型无法做到这一点。我建议你遵循Linq.Enumerable类设置的模式,它为每种数字类型提供显式重载。以Enumerable.Average为例:它为int,long,float,double和Decimal提供重载,没有泛型过载。