我目前必须优化其他程序员的代码。他给我留下了许多模板类,我想利用Intels IPP-Library中的函数来加快计算速度。问题在于,大多数时候这些功能都要求您知道所使用的数据类型。因此,我想重写模板,以便在可以优化操作的情况下使用专用代码。万一不能,应该回到原始代码。

问题是我需要检查是否正在使用某种数据类型,而我不知道该怎么做。

一个例子。我想做这样的事情:

 template < class Elem > class Array1D
 {
    Array1D<Elem>& operator += (const Elem& a)
    {
    if (typeof(Elem) == uchar)
    {
       // use special IPP operation here
    }
    else
    {
           // fall back to default behaviour
    }
 }

有关如何执行此操作的任何想法?最好没有其他库的帮助。

谢谢

最佳答案

使用特化:

    template<>
    class Array1D<uchar>
    {
        Array1D<uchar>& operator += (const uchar& a)
        {
        // special behaviour
        }
    };

但是,如果您不想重写Array1D中的所有其他函数,请考虑对operator + =使用重载。

10-08 08:11