在搜索論壇尋找答案後,我似乎無法解決此問題。將函數作爲參數傳遞給方法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