基本上,我想有以下语义:
#include <functional>
#include <iostream>
class test
{
public:
void add(std::function<void()> f)
{
f();
}
void operator()()
{
++x;
}
int x = 33;
};
int main()
{
test t;
t.add(t);
// wanted: x == 34 instead: x == 33 since add(t) copies it
}
Run Code Online (Sandbox Code Playgroud)
我理解std :: function包装了一个可调用对象的副本,但有没有办法使用std :: function获取对可调用对象的引用?
将"this"传递给以下代码中初始化列表中的另一个对象时是否有任何问题?
class Callback { public: virtual void DoCallback() = 0; };
class B
{
Callback& cb;
public:
B(Callback& callback) : cb(callback) {}
void StartThread();
static void Thread()
{
while (!Shutdown())
{
WaitForSomething();
cb.DoCallback();
}
}
};
class A : public Callback
{
B b;
public:
A() : b(*this) {b.StartThread();}
void DoCallback() {}
};
Run Code Online (Sandbox Code Playgroud)
如果这样做是不安全的,那么最好的替代方案是什么?