
struct Closer{T1 value;T2 com;Closer(T1 _value, T2 _com) : value(_value), com(_com) {}bool operator()(T1 a1, T1 a2){int dis1 = com(a1, value);int dis2 = com(a2, value);if (dis1 == dis2)return a1 < a2;elsereturn dis1 < dis2;}};
第一眼看起来没有头绪,就只能从 main 函数的 Closer 调用中找找线索
Closer<int, int (*)(int, int)>(n, Distance1));这是一个对象创建的语句,模板中第二个参数就是一个函数指针,直接用Closer中的T2替换就行;那么对应的,这条语句就暗示我们,要在struct Closer中弄两个成员变量,分别存这个n和函数指针;同时这也提醒我们要写一个构造函数- 同时还要兼顾
sort函数,所以再重载一下()运算符就行了
