【发布时间】:2011-08-05 14:28:24
【问题描述】:
class Foo
{
double f1( int x, std::string s1 );
double f2( int x, SomeClass s2 );
}
我希望能够绑定 Foo.f1 的 s1 而无需在本质上创建 foo 实例
typedef double (Foo::* MyFooFunc)( int )
MyFooFunc func1 = boost::bind( &Foo::f1, _1, _2, "some string" );
MyFooFunc func2 = boost::bind( &Foo::f2, _1, _2, SomeClass );
然后我将 func1 和 func2 作为参数传递给其他函数,最终将 Foo 绑定在其中:
void SomeOtherFunction( MyFooFunc func )
{
Foo foo;
boost::function< double (int) > finalFunc =
boost::bind( func, foo, _1 );
}
问题: 这可能吗?如果是,1)如何实现呢? 2) MyFooFunc 的声明是什么?
【问题讨论】:
-
这取决于
SomeOtherFunction的声明。请注意,您的第二个 typedef not 是函数指针,它是指向成员函数 (PTMF) 的指针,这是一个完全不同且不兼容的概念。将所有内容包装在std::function或std::tr1::function或boost::function中可能是最强大的解决方案。 -
这里实际上有两个问题:1) 没有实例绑定PTMF。 2) 将绑定的结果表示为 boost 函数。对于 1),我尝试了 boost::bind( &Foo::f1, _1, _2, "hello" )。那没有用。对于 2),我怀疑它是 boost::function,int) >.
标签: c++ boost-bind boost-function