Se sabe que los argumentos de plantilla pueden ser indicadores de funciones de miembro.Deducción de argumento de plantilla para punteros de función de miembro
Por lo tanto, se puede escribir:
struct Bar
{
int fun(float x);
};
template <int (Bar::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<&Bar::fun> FooBar;
Pero lo que si quiero que el tipo de la Bar
a sí misma como un argumento de plantilla:
template <typename B, int (B::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<Bar, &Bar::fun> FooBar;
Ahora, cuando lo uso, tengo que escribir Bar
dos veces!
Mi pregunta es: ¿hay alguna manera de obligar al compilador a deducir el tipo de clase automáticamente?
El objetivo es para que esto funcione simplemente:
typedef Foo<&Bar::fun> FooBar;
typedef Foo<&Moo::fun> FooMoo;
En realidad, estoy usando macros feos para esto (es una plantilla interna de una biblioteca, por lo que no existe un riesgo real de que se haga un mal uso). De todos modos, el 'member_ptr_traits' es genial porque realmente necesito el tipo' T'. – rodrigo