考慮下面的類,它只是一個內部函子f
映射到一個功能稍後運行:C++仿函數模板
class A {
private:
int (A::*f)(int);
int foo(int x) { return x; }
int bar(int x) { return x*2; }
public:
explicit A(bool foo=true) { f = foo ? &A::foo : &A::bar; }
int run(int x) { return (this->*f)(x); }
};
現在說我有另一個類,B
:
class B {
public:
int foo(int) { return x*x; }
};
而且功能foo
:
int foo(int x) { return 0; }
我知道這是不可能有A
指定並運行B::foo
或foo
,因爲它們的原型不同:int (A::*)(int)
vs int (B::*)(int)
vs int (*)(int)
。
我在問什麼是他們的任何方式來模擬A::f
,使它可以採取任何方式嗎?
我會承認不熟悉boost,聽說過它,從來沒有使用它。在我的例子中,'f'的原型是什麼樣的,以便'f'可以被賦予任何函數('A :: foo','B :: foo'和'foo')?只是'功能 f;'它將如何分配? 'f = &::foo;','B b; f =&b.foo'。 –
steveo225
2011-05-19 19:00:52
@ steveo225:閱讀文檔。 – Puppy 2011-05-19 19:04:28
我看到現在Space_C0wb0y發佈了它 – steveo225 2011-05-19 19:07:39