Heim > Backend-Entwicklung > C++ > Wie erstelle und verwende ich generische C++-Funktionszeiger?

Wie erstelle und verwende ich generische C++-Funktionszeiger?

PHPz
Freigeben: 2024-04-17 14:06:02
Original
456 Leute haben es durchsucht

Ein generischer Funktionszeiger ist ein Zeiger auf Funktionen unterschiedlichen Typs und unterschiedlicher Anzahl von Parametern in C++. Das Erstellen eines generischen Funktionszeigers erfordert die Verwendung einer Vorlage, die den Rückgabewerttyp der Funktion und ein Tupel von Parametertypen angibt. Generische Funktionszeiger können mit der folgenden Syntax verwendet werden: Deklarieren Sie einen Funktionszeiger, weisen Sie dem Funktionszeiger eine Funktion zu und rufen Sie die Funktion auf, auf die der Funktionszeiger zeigt. In der Praxis werden generische Funktionszeiger zur Implementierung von Vergleichsfunktionen von Sortieralgorithmen verwendet, die Elemente unterschiedlichen Typs sortieren können.

如何创建和使用 C++ 泛型函数指针?

So erstellen und verwenden Sie generische C++-Funktionszeiger

In C++ ist ein Funktionszeiger ein Zeiger auf eine Funktion. Generische Funktionszeiger können auf Funktionen unterschiedlichen Typs und unterschiedlicher Anzahl von Parametern verweisen.

Erstellen Sie einen generischen Funktionszeiger

Um einen generischen Funktionszeiger zu erstellen, können Sie die Vorlage verwenden:

template <typename Ret, typename... Args>
using GenericFunctionPointer = Ret (*)(Args...);
Nach dem Login kopieren

wobei:

  • Ret der Rückgabewerttyp der Funktion ist. Ret 是函数的返回值类型。
  • Args
  • Args ist ein Tupel von Parametertypen der Funktion.

Erstellen Sie beispielsweise einen generischen Funktionszeiger auf eine Funktion, die einen ganzzahligen Wert empfängt und eine Zeichenfolge zurückgibt:

using FuncPtr = std::string (*)(int);
Nach dem Login kopieren
Verwenden eines generischen Funktionszeigers

Sie können einen generischen Funktionszeiger mit der folgenden Syntax verwenden:

FuncPtr funcPtr;  // 声明函数指针
// 将函数赋值给函数指针
funcPtr = [](int x) { return std::to_string(x); };
// 调用通过函数指针指向的函数
std::string result = funcPtr(42);
Nach dem Login kopieren
Praktischer Fall

Stellen Sie sich einen Sortieralgorithmus vor, der Elemente unterschiedlichen Typs (z. B. Ganzzahlen oder Zeichenfolgen) sortieren kann. Mit einem generischen Funktionszeiger können wir eine Vergleichsfunktion implementieren, die zwei Elemente vergleicht und je nach Größenverhältnis der Elemente eine Ganzzahl zurückgibt.

template <typename T>
int compare(const T& a, const T& b) {
  // 比较两个元素并返回 -1 (a < b)、0 (a == b)或 1 (a > b)
  // ...
}

template <typename T>
void sort(T* array, int length, GenericFunctionPointer<int, const T&, const T&> compareFunc) {
  // 使用比较函数对数组进行排序
  // ...
}
Nach dem Login kopieren

Mit dieser Implementierung können wir ein Array von Ganzzahlen wie folgt sortieren:

int arr[] = {3, 1, 4, 2};
sort(arr, 4, compare<int>);
Nach dem Login kopieren

oder ein Array von Zeichenfolgen: 🎜
std::string arr[] = {"apple", "banana", "cherry"};
sort(arr, 3, compare<std::string>);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erstelle und verwende ich generische C++-Funktionszeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage