You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++传入排序函数作为checkSortTime参数触发C2664错误求解

错误原因
  • 报错核心是函数指针返回值类型不匹配:你定义的checkSortTime模板第一个参数要求传入返回值为T类型的函数指针,但你传入的selectionSort等排序函数是无返回值(void)的,二者类型不一致触发类型转换失败。
  • 对比可正常运行的搜索耗时测试:搜索算法(二分、线性搜索等)本身需要返回找到的索引/目标值,返回值为T类型,和checkSearchTime定义的函数指针返回值匹配,所以不会报错;而排序算法都是直接修改入参数组,不需要返回值,所以不匹配你当前checkSortTime的函数指针定义。
解决方法

直接修改checkSortTime的函数指针参数返回值为void即可,修改后的代码如下:

template<typename T>                                                                                
// 仅需要把原来的T(*funcPointer)改成void(*funcPointer)即可
void checkSortTime(void(*funcPointer)(T myArray[],int size), 
    T arrayArgument[], int sizeArgument) {
    // 原有计时逻辑无需修改
    auto start = std::chrono::high_resolution_clock::now();
    funcPointer(arrayArgument, sizeArgument);
    auto stop = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start);
    std::cout << "[" << duration.count() << "] 纳秒" << std::endl;
}

如果需要更通用的耗时测试方法,兼容不同返回值、不同参数列表的函数,也可以使用C++11及以上支持的auto推导参数类型结合完美转发实现,不用手动定义函数指针类型。

内容的提问来源于stack exchange,提问作者user13800925

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:15:05