当C++11不可用时,应该使用什么构造作为
std::function<>
的代理?替代方案基本上应允许从另一个类中访问一个类的私有成员函数,就像下面的示例一样(没有使用std::function的其他功能)。类Foo已经固定,不能太多地进行更改,我只能访问类Bar。class Foo {
friend class Bar; // added by me, rest of the class is fixed
private:
void doStuffFooA(int i);
void doStuffFooB(int i);
};
class Bar {
public:
Bar( Foo foo, std::function< void (const Foo&, int) > func ) {
myFoo = foo;
myFooFunc = func;
};
private:
doStuffBar( const &Foo foo ) {
myFooFunc( foo, 3 );
}
Foo myFoo;
std::function< void (const Foo&, int) > myFooFunc;
}
int main() {
Foo foo(...);
Bar barA( foo, &Foo::doStuffFooA );
Bar barB( foo, &Foo::doStuffFooB );
...
}
Bar
对象是使用指向私有成员函数的指针构造的,但是发生这种情况的代码没有访问这些成员的权限。这与std::function
无关;它不能打破访问规则。 - Pete Becker