在使用成員函數作為比較器進行排序的上下文中,由於 ISO C中的禁止,會出現常見的編譯錯誤獲取非限定或帶括號的非靜態成員函數的地址以形成指向成員的指針
考慮以下代碼片段:
嘗試將成員函數doCompare 的位址作為std::sort 的第三個參數提供時會發生錯誤。要解決此問題,必須將函數 doCompare 聲明為靜態。然而,這種方法限制了 doCompare 存取 MyClass 資料成員的能力。
要克服這個限制,可以透過修改doCompare 將MyClass 轉換為比較函子,如下所示:
隨後,排序操作可以呼叫為:
注意,doSort方法缺少回傳值,可以根據需要進行修正。
或者,可以使用 std::mem_fun 將成員函數轉換為自由函數,但語法可能很複雜。儘管如此,建議將函數包裝在類別中,如下所示:
以上是如何在C排序中正確使用成員函數作為比較器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!