È noto che gli argomenti del modello possono essere indicatori delle funzioni membro.Detrazione argomento modello per i puntatori funzione membro
così posso scrivere:
struct Bar
{
int fun(float x);
};
template <int (Bar::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<&Bar::fun> FooBar;
Ma cosa succede se voglio il tipo del Bar
in sé ad essere un argomento di un template:
template <typename B, int (B::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<Bar, &Bar::fun> FooBar;
Ora, quando lo uso, devo scrivere Bar
due volte!
La mia domanda è: c'è un modo per forzare il compilatore a dedurre automaticamente il tipo di classe?
L'obiettivo è per questo a poco lavoro:
typedef Foo<&Bar::fun> FooBar;
typedef Foo<&Moo::fun> FooMoo;
In realtà, sto usando dei brutti macros per questo (è un modello interno a una libreria, quindi nessun rischio reale di essere usato in modo improprio). Ad ogni modo, 'member_ptr_traits' è fantastico perché ho davvero bisogno del tipo' T'. – rodrigo