函數指標提供了一個引用特定運算子的方法操作員功能。然而,對於內建標準運算符,這種方法可能並不簡單。本文深入探討了此限制背後的原因,並探討了實現類似功能的替代解決方案。
根據 C 標準 (13.6/ 1)、內建運算子不是常規運算子函數,因此不能有函數指標指向它們。它們僅參與重載決策,而不服務任何其他目的。
為了克服此限制,C 標準引入了函數對象,它提供了與內建函數類似的功能透過模板化對象進行操作。例如,為了進行比較,定義了 equal_to、greater 和 less_equal 等函數物件。這些物件可以用作函數指標參數。
在提供的程式碼片段中,目標是比較範本類別中的兩個整數。使用函數物件技術,可以實現如下:
class MyAction {
bool operator()() {
if (fnCompare_(arg0_, arg1_)) {
// do this
} else {
// do s.th. else
}
}
};
這裡,fnCompare_可以是像std::equal_to
除了函數對象,標準函式庫運算子也可以用作函數指針。但是,必須引用模板的相應實例。例如:
std::basic_string a("test"), b("test2");
std::cout >(a, b, &std::operator );
雖然函數指標不能直接用於內建-在在標準運算子中,函數物件和標準類別運算子提供的替代解決方案允許等效功能。這些替代方案允許使用特定的標準運算子作為函數指針,解決內建運算子帶來的限制。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3