Heim  >  Artikel  >  Backend-Entwicklung  >  Können Sie einen Funktionszeiger auf einen integrierten Standardoperator in C erhalten?

Können Sie einen Funktionszeiger auf einen integrierten Standardoperator in C erhalten?

Barbara Streisand
Barbara StreisandOriginal
2024-10-25 22:10:28105Durchsuche

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

Ist es möglich, den Funktionszeiger eines integrierten Standardoperators abzurufen?

Warum integrierte Operatoren nicht Es gibt keine Funktionszeiger

C 11 definiert integrierte Operatoren in [over.built] und gibt an, dass diese Operatoren an der Überladungsauflösung beteiligt sind, aber keinem anderen Zweck dienen. Daher können Sie keine Funktionszeiger haben, die auf sie verweisen.

Arbeiten mit Funktionsobjekten

Um dieses Problem zu beheben, führt der Standard Funktionsobjekte in [function.objects] ein. Diese Objekte können in ihrer Funktion „operator()“ in ihre entsprechenden Operatoren zerfallen:

  • Arithmetische Operationen
  • Vergleiche (gleich_gleich, nicht_gleich_gleich, größer/kleiner, größer_gleich/weniger_gleich)
  • Logische Operationen
  • Bitweise Operationen

Funktionsobjekte können als Funktionszeigerargumente verwendet werden, wie in der Antwort von user1034749 gezeigt.

Verwendung des Standardklassentyps Operatoren

Standardbibliotheksoperatoren können Sie als Funktionszeiger verwenden, obwohl Sie auf ihre jeweiligen Vorlageninstanzen verweisen müssen. Der Compiler benötigt ausreichende Hinweise, um die richtige Vorlage abzuleiten. Hier ist ein Beispiel:

<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>

In diesem Beispiel wird der Operator als Funktionszeiger für die test_function bereitgestellt. Beachten Sie, dass der Abzug in einigen Compilern wie MSVC 2012 fehlschlägt, wenn Sie das Vorlagenargument für test_function weglassen.

Das obige ist der detaillierte Inhalt vonKönnen Sie einen Funktionszeiger auf einen integrierten Standardoperator in C erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn