我有一个通用列表容器,它的函数 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) 评估为真。迭代器的取消引用运算符返回节点中的数据,因此迭代器和数据的类型将相同。
我正在尝试传递一个检查对象是否在列表中的函数:
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);
我在这里做错了什么?在谷歌上搜索表明我必须将 static_cast 应用于 findByUnique 但我不确定它如何应用在这里。
谢谢。