回调函数?关于C++的函数指针
RT,试着帮我看看下面的test函数为啥调用会报错,说参数类型不匹配???#include <iostream>
#include <vector>
using namespace std;
template <typename T>
void selectsort(vector<T>& arr)
{
T temp;
for(int i=0; i<arr.size()-1; i++)
{
for(int j=i+1; j<arr.size(); j++)
{
if(arr < arr)
{
temp = arr;
arr = arr;
arr = temp;
}
}
}
}
template <typename T>
void bubblesort(vector<T>& arr)
{
T temp;
for(int i=0; i<arr.size(); i++)
{
for(int j=0; j<arr.size()-i-1; j++)
{
if(arr > arr)
{
temp = arr;
arr = arr;
arr = temp;
}
}
}
}
template <typename T>
void insertsort(vector<T>& arr)
{
T temp;
for(int i=1; i<arr.size(); i++)
{
for(int j=i; j>0 && arr<arr; j--)
{
temp = arr;
arr = arr;
arr = temp;
}
}
}
template <typename T>
void test(void (*func)(vector<T> vct), vector<T> vct)
{
func(vct);
}
int main(void)
{
vector<int> vct {3, 4, 6, 0, -2, -2, 0, 0, -1, -9};
test(insertsort, vct);
for(int &e: vct)
cout << e << ", ";
cout << endl;
return 0;
}
主要是这个test函数,它接受一个函数指针进行回调
对bubblesort、selectsort和quicksort进行排序
test(排序函数, vector类型); //这是我想法的样子,但是调用失败了,说参数不匹配???
template <typename T>
void test(void (*func)(vector<T> vct), vector<T> vct)
{
func(vct);
} 还是说template只能接受一层,就是说因为这里被调用的函数(函数指针指向的函数,也就是那三个排序算法),本身也是template function,而调用所在的test函数也是一个template函数,,,所以不行,,,不知道对不对,好像是那个template的初始化问题 #include <iostream>
#include <vector>
using namespace std;
template <typename T>
void selectsort(vector<T>& arr)
{
T temp;
for(int i=0; i<arr.size()-1; i++)
{
for(int j=i+1; j<arr.size(); j++)
{
if(arr < arr)
{
temp = arr;
arr = arr;
arr = temp;
}
}
}
}
template <typename T>
void bubblesort(vector<T>& arr)
{
T temp;
for(int i=0; i<arr.size(); i++)
{
for(int j=0; j<arr.size()-i-1; j++)
{
if(arr > arr)
{
temp = arr;
arr = arr;
arr = temp;
}
}
}
}
template <typename T>
void insertsort(vector<T>& arr)
{
T temp;
for(int i=1; i<arr.size(); i++)
{
for(int j=i; j>0 && arr<arr; j--)
{
temp = arr;
arr = arr;
arr = temp;
}
}
}
template <typename T>
void test(void (*func)(vector<T> &vct), vector<T> &vct)//vector<T>& arr vector<T> &vct
{
func(vct);
}
int main(void)
{
vector<int> vct {3, 4, 6, 0, -2, -2, 0, 0, -1, -9};
test(insertsort, vct);
for(int &e: vct)
cout << e << ", ";
cout << endl;
return 0;
} baige 发表于 2020-10-26 07:07
什么意思,不是要把被测试的函数指针传到test函数的参数里面吗 baige 发表于 2020-10-26 07:07
谢谢回复。
vector<t>& arr vector<t>& vct
这不是函数指针吧
页:
[1]