我有一些代码 100% 适用于我的用例。我只是想知道是否有人可以解释它是如何以及为什么工作的。
我有一个模板类,位于一些处理线程和网络通信的代码与库用户之间,用于将从服务器接收到的数据传递给用户。
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;
};
该模板根据 Bar 和 Baz 的类型在库中实例化和使用,如下所示:
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 );
这一切都有效,并且 boost::bind 调用 getter/setter 函数将数据传递到需要的地方。像本例一样,将指针作为模板参数传递给成员函数是如何以及为何有效的?
作为对评论的回应,我没有意识到指向成员函数的指针是有效的模板参数。这不是我以前在“野外”见过的东西。我尝试了一下,确实有效,但没想到会这样。