C 11 在[over.built] 中定義了內建運算符,並指定這些運算符參與重載決策,但不用於其他目的。因此,您不能擁有指向它們的函數指標。
為了解決這個問題,標準在 [function.objects] 中引入了函數物件。這些物件可以在其operator()函數中衰減為其對應的運算符:
函數物件可以用作函數指標參數,如使用者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中文網其他相關文章!