了解std :: function作为参数的用法

时间:2015-01-27 11:59:51

标签: c++ c++11

我想使用'std :: function'将函数作为参数提供给我的函数。我的功能如下;

template <class T>
bool mySort(T *arr, const int  &size, std::function<bool (T, T)> CompareFunction)
{
      //something
}

在我的main函数中,我创建一个随机分配的整数数组,并使用我自己的比较函数将其赋予此函数。

bool myCompare (int a , int b)
{
    return (a < b) ? true : false;
}

int main(int argc, char** argv) {
    int a[20];
    srand(time(0));
    for(int i = 0; i < 20; ++i)
    {
        a[i] = rand();
    }
    .....
}

问题是,如果我使用如下的对象,它工作正常,但如果我直接给出函数它会引发错误;

std::function<bool (int, int)> asd = myComp;
mySort(a, 20, asd); //This works just fine
mySort(a, 20, myComp); //This gives 'no matching function' error

我不明白原因。互联网上也找不到任何合理的解释。 lambda函数也存在问题;

std::function<bool (int, int)> asdf = [](int a, int b)
                    {
                        return (a<b);
                    };
mySort(a, 20, asdf); //This is fine
mySort(a, 20, [](int a, int b)
                    {
                        return (a<b);
                    }); //This is not

欢迎任何想法或建议。

0 个答案:

没有答案