[英]Passing a template function as a parameter in C++
我有一個通用的列表容器,其功能定義如下:
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);
我在這里做錯了什么? 在google上搜索表明我必須將static_cast應用於findByUnique,但不確定在這里如何應用。
謝謝。
@泰勒·弗洛雷斯是對的。 您沒有在find或變量f的聲明中正確聲明函數指針。 參見(例如):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.