函數指標提供了一種引用特定運算子的方法操作員功能。然而,對於內建標準運算符,這種方法可能並不簡單。本文深入探討了此限制背後的原因,並探討了實現類似功能的替代解決方案。
根據 C 標準 (13.6/ 1)、內建運算子不是常規運算子函數,因此不能有函數指標指向它們。它們僅參與重載解析,而不服務於任何其他目的。
為了克服此限制,C 標準引入了函數對象,它提供了與內置函數類似的功能通過模板化對象進行操作。例如,為了進行比較,定義了 equal_to、greater 和 less_equal 等函數物件。這些物件可以用作函數指標參數。
在提供的程式碼片段中,目標是比較範本類別中的兩個整數。使用函式物件技術,可以實現如下:
<code class="cpp">class MyAction { bool operator()() { if (fnCompare_(arg0_, arg1_)) { // do this } else { // do s.th. else } } };</code>
這裡,fnCompare_可以是像std::equal_to
除了函數物件之外,標準函式庫運算子也可以用作函數指標。但是,必須引用模板的相應實例。例如:
<code class="cpp">std::basic_string<char> a("test"), b("test2"); std::cout << test_function<std::basic_string<char>>(a, b, &std::operator+);</code>
雖然函數指標不能直接用於內建標準運算符,但函數物件和標準類別運算子提供的替代解決方案允許等效功能。這些替代方案允許使用特定的標準運算子作為函數指針,解決內建運算子帶來的限制。
以上是## 您可以獲得內建 C 運算子的函數指標嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!