Funktionszeiger bieten eine Möglichkeit, auf bestimmte zu verweisen Operatorfunktionen. Für integrierte Standardoperatoren ist dieser Ansatz jedoch möglicherweise nicht einfach. Dieser Artikel befasst sich mit den Gründen für diese Einschränkung und untersucht alternative Lösungen, um eine ähnliche Funktionalität zu erreichen.
Gemäß dem C-Standard (13.6/ 1) Integrierte Operatoren sind keine regulären Operatorfunktionen und können daher nicht über Funktionszeiger verfügen, die auf sie verweisen. Sie beteiligen sich lediglich an der Überlastungsauflösung, ohne einem anderen Zweck zu dienen.
Um diese Einschränkung zu überwinden, führt der C-Standard Funktionsobjekte ein, die eine analoge Funktionalität zu integrierten Funktionen bieten Operatoren durch Vorlagenobjekte. Für Vergleiche werden beispielsweise Funktionsobjekte wie equal_to, great und less_equal definiert. Diese Objekte können als Funktionszeigerargumente verwendet werden.
Im bereitgestellten Codeausschnitt besteht das Ziel darin, zwei Ganzzahlen innerhalb einer Vorlagenklasse zu vergleichen. Mithilfe der Funktionsobjekttechnik kann dies wie folgt erreicht werden:
class MyAction {
bool operator()() {
if (fnCompare_(arg0_, arg1_)) {
// do this
} else {
// do s.th. else
}
}
};
Hier kann fnCompare_ ein Funktionsobjekt wie std::equal_to
Zusätzlich zu Funktionsobjekten Standardbibliotheksoperatoren können auch als Funktionszeiger verwendet werden. Es muss jedoch auf die jeweilige Instanz der Vorlage verwiesen werden. Zum Beispiel:
std::basic_string a("test"), b("test2");
std::cout >(a, b, &std::operator );
Während Funktionszeiger nicht direkt für integrierte Funktionen verfügbar sind. Bei Standardoperatoren ermöglichen die alternativen Lösungen, die von Funktionsobjekten und Standardklassentypoperatoren bereitgestellt werden, eine gleichwertige Funktionalität. Diese Alternativen ermöglichen die Verwendung spezifischer Standardoperatoren als Funktionszeiger und beseitigen so die Einschränkungen, die durch integrierte Operatoren entstehen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3