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