我的头衔是我的主要问题。下面的代码显示了我想做什么,但是会导致错误。
class B
{
public:
void DoSomething(void (*func)())
{
func();
}
};
class A
{
public:
int x;
void Start(B* b)
{
auto func = [this]()->void
{
this->x++;
};
b->DoSomething(func);
}
};
如果删除“ this”关键字,则程序可以运行,但是无法引用x变量。
那么我该如何实现呢?
更改
void DoSomething( void (*func)() )
至
void DoSomething( std::function<void()> func )
您当前的参数类型void (*func)()
是一个函数指针,它是一种不保持状态的可调用(可以像函数一样调用的类型)。这就是为什么您的变量this
无法传递到函数中的原因。只有不捕获任何内容的lambda可以转换为无状态函数指针。
std::function
但是可以代表(几乎)任何可调用的东西。它可以是原始函数,operator()
也可以是实现的类的实例,也可以是lambda保持状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句