KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have some code that 100% works for the use case I have. I'm just wondering if anyone can explain how and why it works. I have a template class that sits between some code that handles threading and network communication and the library user to pass data received from the server to the user. 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; }; This template is instantiated and used in the library depending on the types of Bar and Baz like so: 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 ); This all works and boost::bind calls the getter/setter functions to pass the data around where it needs to go. How and why does passing pointers to member functions as a template argument like in this case work? In response to comments, I hadn't realized that pointers to member functions were valid template arguments. It's not something I had seen "in the wild" before. I tried it and it worked, but I wasn't expecting it to.
Tags (comma-separated)
Save Edits
Cancel