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