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

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

PHPz
PHPzOriginal
2024-04-17 14:06:02431Durchsuche

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...);

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);
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);
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) {
  // 使用比较函数对数组进行排序
  // ...
}

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

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

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

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!

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

In Verbindung stehende Artikel

Mehr sehen