當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