Übergabe der Funktion als Vorlagenparemeter einer Klasse mit unbekanntem Typ

Dec 01 2020

Ich weiß, dass wir so etwas tun können:

void f1(){ printf("1"); }
void f2(){ printf("2"); }

template <void F()>
class A{
public:
    void func(){
        F();
    }
};

int main(){
    A<f1> a1; a1.func(); // printing "1"
    A<f2> a2; a2.func(); // printing "2"
}

Ist es dann möglich, ohne die Rückgabe- und Argumenttypen der Funktion f1 und f2 zu kennen? Zum Beispiel,

void f1(){ ... }
int f2(){ ... }

int main(){
    A<f1> a1; a1.f();
    A<f2> a2; a2.f();
}

Vielen Dank.

Antworten

3 Jarod42 Dec 01 2020 at 15:30

In C ++ 17 können Sie einfach verwenden auto

template <auto F>
class A{
public:
    void func(){
        F();
    }
};