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.
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:
Funktionsobjekte können als Funktionszeigerargumente verwendet werden, wie in der Antwort von user1034749 gezeigt.
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!