有没有办法在.net(C ++ - CLI)中对泛型类型执行划分?

时间:2014-03-24 10:51:05

标签: .net generics c++-cli

我正在尝试为通用数字类型创建一个简单的滚动平均值实现,但是遇到了绊脚石:

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'

有没有办法将泛型类限制为对数值运算感到满意的类?

1 个答案:

答案 0 :(得分:0)

使用泛型无法做到这一点。我建议你遵循Linq.Enumerable类设置的模式,它为每种数字类型提供显式重载。以Enumerable.Average为例:它为int,long,float,double和Decimal提供重载,没有泛型过载。