簡體   English   中英

在C ++中將模板函數作為參數傳遞

[英]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的聲明中正確聲明函數指針。 參見(例如):

http://www.cprogramming.com/tutorial/function-pointers.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM