Wiadomo, że argumenty szablonu mogą być wskaźnikami funkcji składowych.Odliczanie argumentów szablonu dla wskaźników funkcji członkowskich
Więc mogę napisać:
struct Bar
{
int fun(float x);
};
template <int (Bar::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<&Bar::fun> FooBar;
ale co jeśli chcę sam typ Bar
być argumentem szablonu:
template <typename B, int (B::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<Bar, &Bar::fun> FooBar;
Teraz, kiedy go używać, muszę napisać Bar
dwa razy!
Moje pytanie brzmi: czy istnieje sposób zmuszenia kompilatora do automatycznego wyprowadzenia typu klasy?
Celem jest to, aby po prostu pracować:
typedef Foo<&Bar::fun> FooBar;
typedef Foo<&Moo::fun> FooMoo;
Właściwie używam do tego nieprzyjemnych makr (jest to szablon wewnętrzny biblioteki, więc nie istnieje realne ryzyko niewłaściwego użycia). W każdym razie 'member_ptr_traits' jest świetne, ponieważ faktycznie potrzebuję typu' T'. – rodrigo