我想从函数对象中检索状态。但是函数对象已被转换为function<>
模板。我该怎么做?
我是说:
功能对象:
class Counter {
private:
int counter_;
public:
Counter():counter_(0) {cout << "Constructor() called" << endl;}
Counter(int a):counter_(a) {cout << "Constructor(a) called" << endl;}
void operator()(int sum) {
cout << counter_++ + sum << endl;
}
int getCounter() { return counter_;}
};
在主要。我的第一步是直接使用对象:
int main() {
Counter a(10);
a(0);
a(0);
cout << "Counter: " << a.getCounter() << endl;
它的节目:
构造函数(a)调用
10
11
计数器:12
没关系,这是我所期望的。
但在
Counter b(10);
function<void(int)> f = b;
f(0);
f(0);
cout << "Counter: " << b.getCounter() << endl;
表明
构造函数(a)调用
10
11
计数器:10
啊!,我认为 f 是真实对象的包装器,所以修改f
我们真的修改了b
. 否:f
有 的副本b
,但我无法调用f.getCounter()
我如何从 中获取 State (counter_var) f
?
我不能直接使用Counter
类(在这个例子中),因为我有一些其他类似的具有相同签名“void(int)”的类,我想在调用者函数中模糊地使用它们。
我可以完全避免std::function
为我的所有函数对象使用公共基类的模板,但我认为有一个解决方案更 C++11 与 STL 和模板......
那么,有没有解决方案?
谢谢