std::function<>
の代わりにC++ 11を使用できない場合は、どのような構造を代用する必要がありますか?
代わりに、以下の例のようにあるクラスのプライベートメンバー関数にアクセスすることを基本的に許可する必要があります(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);
...
}
このコードはコンパイルべきではない、場合でも明白:ここでは、そのようなクラステンプレートは、(これは一例であり、生産コードでは使用しないでください)ゼロから定義することができる方法の可能性、説明の実装があります構文上の誤りは修正されています。 2つの 'Bar'オブジェクトはプライベートメンバ関数へのポインタで構築されますが、このコードがそのメンバにアクセスすることはできません。これは 'std :: function'とは何の関係もありません。アクセスルールを破ることはありません。 –