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;