在搜索论坛寻找答案后,我似乎无法解决此问题。将函数作为参数传递给方法C++
为了教学目的,我创建了一个(模板)链表类。我班有以下方法:
template <typename E>
bool List<E>::hasValue(E value, bool (*fn)(E, E)){
bool hasValue = false;
node* c = head;
while (true) {
if (c->value == value) {
hasValue = true;
break;
}
else if (c->next != 0) {
c = c->next;
}
else {
break;
}
}
return hasValue;
}
我想bool (*fn)(E, E)
是任何重载==操作符用户像这样定义的:
struct record {
string name;
int age;
};
bool operator==(const record& r1, const record& r2) {
bool result = false;
if (r1.name == r2.name && r1.age == r2.age) {
result = true;
}
return result;
}
然而
如果我叫list.hasValue({"duder", 20}, operator==)
Xcode的报告:
没有找到匹配的成员函数调用'hasValue'
我似乎无法找到任何这种情况发生的原因的在线解释。
你'==操作符'码相当复杂。你可以(也应该)简单地使用'return r1.name == r2.name && r1.age == r2.age;'。 – 2015-02-08 16:00:07
@KonradRudolph你是对的。 – dude 2015-02-08 16:13:03