Вывод аргументов шаблона для указателей на функции-члены

Известно, что аргументы шаблона могут быть указателями на функции-члены.

Так что я могу написать:

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

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

typedef Foo<&Bar::fun> FooBar;

Но что, если я хочуBar введите себя в качестве аргумента шаблона:

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

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

Теперь, когда я использую это, я должен написатьBar дважды!

Мой вопрос: есть ли способ заставить компилятор автоматически определять тип класса?

Цель для этого просто работать:

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

Ответы на вопрос(2)

Ваш ответ на вопрос