Vorlagenargumentabzug für Zeiger auf Elementfunktionen

Es ist bekannt, dass Template-Argumente Zeiger auf Member-Funktionen sein können.

So kann ich schreiben:

struct Bar
{
    int fun(float x);
};

template <int (Bar::*FUN)(float)>
struct Foo
{ /*...*/ };

typedef Foo<&Bar::fun> FooBar;

Aber was ist, wenn ich das will?Bar Geben Sie sich als Template-Argument ein:

template <typename B, int (B::*FUN)(float)>
struct Foo
{ /*...*/ };

typedef Foo<Bar, &Bar::fun> FooBar;

Wenn ich es jetzt benutze, muss ich schreibenBar zweimal!

Meine Frage ist: Gibt es eine Möglichkeit, den Compiler zu zwingen, den Klassentyp automatisch abzuleiten?

Das Ziel ist, dass dies nur funktioniert:

typedef Foo<&Bar::fun> FooBar;
typedef Foo<&Moo::fun> FooMoo;

Antworten auf die Frage(2)

Ihre Antwort auf die Frage