C++模板中,函数的具体类型是什么?

image
函数定义中的Compare是一个函数的引用

image
如果需要指明模板参数,应该是什么?简单点说,上图红圈处应该填什么?

image
这是做参数的函数

PS:版本是C++98

最佳答案

linked_list* merge_two_linkedlists_asc(linked_list* lists1, linked_list* lists2, compare_int)
  1. T 可能是各种各样的自定义类型,因此需要调用者提供链表合并时元素T的比较方式。
  2. Compare &_cmp 一个可调用对象,可能的类型:

    • 函数原型: bool cmp(int, int) {}
    • 函数指针: bool (*cmp)(int, int);
    • lambda 表达式: auto cmp = &->bool{...}
    • 重载了()运算符的类: class cmp { bool operator(int, int){...} };
    • std::bind
    • std::function
  3. 使用”引用“是避免 _cmp 实参是非函数、指针而是闭包、自定义对象的低效拷贝。