Известно, что аргументы шаблона могут быть указателями на функции-члены.
Поэтому я могу написать:
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;