Przekazanie wskaźnika do funkcji składowej jako argumentu szablonu. Dlaczego to działa?

Mam kod, który w 100% działa w przypadku użycia, jaki mam. Zastanawiam się tylko, czy ktoś może wyjaśnić, jak i dlaczego to działa.

Mam klasę szablonów, która znajduje się pomiędzy jakimś kodem, który obsługuje wątkowanie i komunikację sieciową, a użytkownikiem biblioteki, który przekazuje dane otrzymane z serwera do użytkownika.

template <class Bar,
          class Baz,
          class BazReturnType,
          void (Bar::*BarSetterFunction)(const BazReturnType &),
          BazReturnType (Baz::*BazGetterFunction)(void) const>
class Foo
{
    Foo( Bar *bar )
        : m_bar(bar)
    {
    }

    void FooMemberFunction( const Baz *baz )
    {
        boost::bind( BarSetterFunction, m_bar,
                     boost::bind( BazGetterFunction, baz )() ) ();
    }

    Bar *m_bar;
};

Ten szablon jest tworzony i używany w bibliotece w zależności od typu paska i baz, takich jak:

typedef Foo<MyBar,
            MyBaz,
            ReturnTypeFromBazGetterFunction,
            &MyBar::ActualSetterFunction,
            &MyBaz::ActualGetterFunction >
    MyFoo;

MyBar *bar = new MyBar;
MyBaz *baz = new MyBaz;
MyFoo *f = new MyFoo( bar );
f->FooMemberFunction( baz );

To wszystko działa i boost :: bind wywołuje funkcje getter / setter, aby przekazywać dane do miejsca, w którym musi się znaleźć.Jak i dlaczego przekazywanie wskaźników do elementów funkcjonuje jako argument szablonu, jak w tym przypadku?

W odpowiedzi na komentarze nie zdawałem sobie sprawy, że wskaźniki do funkcji składowych były poprawnymi argumentami szablonu. To nie było coś, co widziałem wcześniej „na wolności”. Próbowałem tego i zadziałało, ale nie spodziewałem się tego.

questionAnswers(2)

yourAnswerToTheQuestion