Heim > Backend-Entwicklung > C++ > Können Template-Funktionen als Template-Argumente in C übergeben werden?

Können Template-Funktionen als Template-Argumente in C übergeben werden?

Mary-Kate Olsen
Freigeben: 2024-11-02 18:44:02
Original
421 Leute haben es durchsucht

Can Template Functions Be Passed as Template Arguments in C  ?

Vorlagenfunktion als Vorlagenargument

In C kann generische Programmierung durch Funktionszeiger oder Vorlagen erreicht werden. Während Vorlagen Inline-Funktionsaufrufe gewährleisten, stoßen sie beim Umgang mit generischen Funktionen selbst auf Einschränkungen.

Problemstellung

Beachten Sie den folgenden Code:

<code class="cpp">void a(int) {
    // do something
}
void b(int) {
    // something else
}

template<void (*param)(int) >
void function() {
    param(123);
    param(456);
}</code>
Nach dem Login kopieren

Während diese Vorlagenfunktion die Wiederholung zwischen Funktion1 und Funktion2 vereinfacht, wird es problematisch, wenn a und b selbst generisch sind:

<code class="cpp">template<typename T>
void a(T t) {
    // do something
}

template<typename T>
void b(T t) {
    // something else
}

template< ...param... > // ???
void function() {
    param<SomeType>(someobj);
    param<AnotherType>(someotherobj);
}</code>
Nach dem Login kopieren

Lösung: Vorlagenvorlagenparameter

Um die generische Funktion mit den generischen Funktionen a und b zu definieren, müssen wir Vorlagenparameter verwenden. Eine direkte Übergabe dieser Funktionen als Typen ist jedoch nicht möglich. Daher verwenden wir einen Workaround mit Dummy-Strukturen:

<code class="cpp">template<typename T>
struct a {
    static void foo(T = T()) {}
};

template<typename T>
struct b {
    static void foo(T = T()) {}
};

template<template<typename P> class T>
void function() {
    T<SomeObj>::foo();
    T<SomeOtherObj>::foo();
}</code>
Nach dem Login kopieren

Durch Angabe des Template-Template-Parameters als Dummy-Strukturen a und b können wir die Template-Funktion instanziieren und die generischen foo-Methoden innerhalb der Funktion aufrufen.

Das obige ist der detaillierte Inhalt vonKönnen Template-Funktionen als Template-Argumente in C übergeben werden?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage