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
Mary-Kate OlsenOriginal
2024-11-02 18:44:02398Durchsuche

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>

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>

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>

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!

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