当C++ 11不可用时,应该使用什么构造作为std::function<>
的代理?
替代方案应该基本上允许从下面的例子中访问另一个类的一个类的私有成员函数(不使用std :: function的其他功能)。 Foo类是固定的,不能改变太多,我只能访问类Bar。在C++ 11之前是否有类似于std :: function的东西?
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'无关;它不会破坏访问规则。 – 2013-03-02 17:37:24