我正在模擬一個隊列類,所以我可以將它用於int和任何我需要定義的結構。如何將函數回調傳遞給類成員?
我需要將一個比較函數傳遞給類構造函數,一個預定義的比較函數,用於整數等,然後將其留給客戶端以提供它們可能需要的任何比較函數。但我該怎麼做?
template<typename Type>
int cmpFn(Type one, Type two)
{
if (one < two) return -1;
if (one > two) return 1;
return 0;
}
template <typename Type>
class Queue
{
public:
Queue()
{
Type *list = new Type[size];
// What do I do now?
// How to define this constructor?
// It must pass a comparison function
// to a private sort method in this class.
}
private:
void sortFunc(Type list, int(fn)(Type one, Type two)=cmpFn);
};
有可能在上述代碼中的一些錯誤,因爲我只是把它寫下來,從我的頭頂,使我的問題更加清晰。但是我感興趣的是如何在定義類時將比較函數傳遞給排序方法。
這是個人練習,我沒有參加任何課程,也沒有任何導師。我已經使用了一段時間了,但我不能提出正確的答案......我想我並沒有向谷歌先生提出正確的問題。
P.S. 客戶可能要爲任何類型的數據提供比較的功能,如:
struct individual
{
string name;
int age;
double height;
};
我猜測,構造函數是這樣的:
Queue(int (*fn)(Type, Type) = cmpFn);
但是我怎麼定義/實現這個?它不是一個使用這個回調函數的Queue對象本身,而是它的方法:sort();
這不是一個答案,但在C++的精神,我會設計這個不同的;即期望'T'帶有'operator <'或'std :: less'的專門化,並將其用於排序。甚至可能公開迭代器,儘管這可能對隊列式結構沒有幫助。 –