我有一个通用列表容器,其函数find定义如下:
template <class T>
typename List<T>::Iterator List<T>:: find(void * f, T data) {
Iterator iterator;
for (iterator = begin() ; iterator != end() ; iterator++) {
if (f(*iterator, data)) {
break;
}
}
return iterator;
}
因此它需要一个函数f和一个类型为T的实例,然后迭代列表中的节点,其节点“包含”一个类型为T的实例,直到其中一个导致f(* iterator,data)计算为true 。 迭代器的解引用运算符返回节点中的数据,因此迭代器和数据的类型将是相同的。
我正在尝试传递一个函数来检查对象是否在列表中:
template <class T>
bool findByUnique(T compare, T data) {
if (compare == data) {
return true;
}
else {
return false;
}
}
我正在尝试按如下方式传递函数,但得到错误:
store.cpp:28:14: error: cannot resolve overloaded function âfindByUniqueâ based on conversion to type âvoid*â
store.cpp:29:56: error: expected primary-expression before â>â token
store.cpp:29:60: error: left operand of comma operator has no effect [-Werror=unused-value]
第27-29行(传递函数):
Album album(barcode,price,year,numPurchased,title,artist);
void * f = &findByUnique<Album>;
List<Album>::Iterator found = this->Albums->find<Album>(f,album);
我在这里做错了什么? 在Google上搜索表示我必须将static_cast应用于findByUnique,但我不确定它是如何应用的。
感谢。
答案 0 :(得分:0)