(C++)我有很多Entry類,並且獲得了包含Entry處理邏輯的BaseProcessor接口。 (見下面的代碼)使用函數指針作爲模板參數
該條目不提供運營商<()。 BaseProcessor提供了一個指向特定BaseProcessor實現的less(Entry,Entry)函數的指針。
我可以使用函數指針來比較我的程序中的Entry實例。然而,我需要創建std :: set(或std :: map或其他使用less())的Entry類。我試圖使用std :: binary_function派生類將它傳遞給std :: set,但它看起來像我不能將函數指針值傳遞給模板。
我該怎麼做?用C++ 03可以嗎?
謝謝。
struct Entry
{
// ...
private:
bool operator< (const Entry &) const; // Should be defined by BaseProcessor.
};
typedef bool (*LessFunc)(const Entry &, const Entry &);
class BaseProcessor
{
public:
// ...
virtual LessFunc getLessFunc() const = 0;
};
// ...
BaseProcessor *processor = getProcessor();
LessFunc lessfunc = processor->getLessFunc();
Entry e1;
Entry e2;
bool isLess = lessfunc(e1, e2); // OK
typedef std::set<Entry, ???> EntrySetImpl; // how to use lessfunc here?
EntrySetImpl entries;
是的,它的工作原理。萬分感謝。 – Rom098 2010-10-22 11:50:15
但是...它看起來像沒有辦法使用函數指針值作爲非類型模板參數。對?像「template class Comparator {...}」 –
Rom098
2010-10-22 11:54:34
@Roman - 你也可以這樣做,對於你寫的類,但是'set'不能像那樣工作。但是,您指定爲模板參數的'LessFunc'必須是編譯時常量(例如,它不能是調用函數的結果)。 – Doug 2010-10-22 11:59:39