Dedução de argumento de modelo para ponteiros de função de membro
Sabe-se que os argumentos de modelo podem ser ponteiros para funções de membro.
Então eu posso escrever:
struct Bar
{
int fun(float x);
};
template <int (Bar::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<&Bar::fun> FooBar;
Mas e se eu quiser oBar
digite-se para ser um argumento de modelo:
template <typename B, int (B::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<Bar, &Bar::fun> FooBar;
Agora, quando eu uso, eu tenho que escreverBar
duas vezes!
Minha pergunta é: Existe uma maneira de forçar o compilador a deduzir o tipo de classe automaticamente?
O objetivo é que isso funcione apenas:
typedef Foo<&Bar::fun> FooBar;
typedef Foo<&Moo::fun> FooMoo;