In C fehlen den integrierten Operatoren echte Funktionszeiger-Gegenstücke und dies ist auch nicht der Fall spielen über die Überlastungsauflösung hinaus eine Rolle. Um dies zu beheben, definiert der Standard Funktionsobjekte, die das Verhalten integrierter Operatoren widerspiegeln.
Der Standard stellt Funktionsobjekte zur Kapselung von Arithmetik- und Vergleichsoperationen bereit, z als:
Diese Objekte bieten die gleiche Funktionalität wie ihre entsprechenden Operatoren und können als Funktionszeigerargumente verwendet werden.
Bestimmte Standardbibliotheksoperatoren ermöglichen Funktionszeiger. Hierzu ist jedoch die Angabe des Vorlagentyps der beteiligten Objekte erforderlich. Um beispielsweise den Operator von std::basic_string zu verwenden, könnte man Folgendes implementieren:
<code class="cpp">template<class Test> Test test_function (Test const &a, Test const &b, Test (*FPtr)(Test const &, Test const &)) { return FPtr(a, b); }</code>
Der folgende Code demonstriert die Verwendung eines Funktionsobjekts für eine Vergleichsoperation :
<code class="cpp">template<typename ParamsType, typename FnCompareType> class MyAction { public: MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCompare) : arg0_(arg0), arg1_(arg1), fnCompare_(fnCompare) {} bool operator()() { if((*fnCompare_)(arg0_,arg1_)) { // do this } else { // do s.th. else } } private: ParamsType& arg0_; ParamsType& arg1_; FnCompareType& fnCompare_; }; void doConditional(int param1, int param2) { MyAction<int, std::equal_to<int>> action(param1,param2); if(action()) { // Do this } else { // Do that } }</code>
Das obige ist der detaillierte Inhalt von**Wie können Sie Funktionsobjekte verwenden, um die Funktionalität integrierter Operatoren in C zu erreichen?**. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!