首頁 >後端開發 >C++ >你能得到一個指向 C 中內建標準運算子的函數指標嗎?

你能得到一個指向 C 中內建標準運算子的函數指標嗎?

Barbara Streisand
Barbara Streisand原創
2024-10-25 22:10:28188瀏覽

Can you get a function pointer to a built-in standard operator in C  ?

是否可以取得內建標準運算子的函數指標?

為什麼內建運算子不能沒有函數指標

C 11 在[over.built] 中定義了內建運算符,並指定這些運算符參與重載決策,但不用於其他目的。因此,您不能擁有指向它們的函數指標。

使用函數物件

為了解決這個問題,標準在 [function.objects] 中引入了函數物件。這些物件可以在其operator()函數中衰減為其對應的運算符:

  • 算術運算
  • 比較(equal_to、not_equal_to、greater/less、greater_equal/less/less_equal)
  • 邏輯運算
  • 位元運算

函數物件可以用作函數指標參數,如使用者1034749所提供的回應所示。

使用標準類別類型運算符

對於標準庫運算符,您可以將它們用作函數指針,儘管您需要引用它們各自的模板實例。編譯器需要足夠的提示來推斷出正確的模板。以下是一個範例:

<code class="cpp">#include <iostream>
#include <string>

using namespace std;

template<class Test>
Test test_function(Test const &a, Test const &b, Test (*FPtr)(Test const &, Test const &))
{
   return FPtr(a, b);
}

int main()
{
   typedef basic_string<char> String;
   String a("test"), b("test2");
   cout << test_function(a, b, &operator+);
   return 0;
}</code>

在此範例中,運算子作為 test_function 的函數指標提供。請注意,如果省略 test_function 的模板參數,則在某些編譯器(如 MSVC 2012)中推導將會失敗。

以上是你能得到一個指向 C 中內建標準運算子的函數指標嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn