我想使用'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
欢迎任何想法或建议。