如何从类对象自己的回调函数中访问其成员? 我尝试将调用者对象作为回调函数的参数发送,并从回调函数访问它。
在下面的代码中,我在这一行得到一个
error: invalid use of void expression
test.onEvent(onUpdateEvent(test));
一种解决方案是将测试对象定义为全局,并将 onEvent 函数定义为
void onEvent(const std::function<void()> &callback)
并从回调函数中删除参数。
但是我想知道是否还有其他方法。这是示例代码:
#include <iostream>
#include <functional>
class Test
{
public:
int x;
void onEvent(const std::function<void(Test)> &callback)
{
Test_Callback = callback;
};
std::function<void(Test)> Test_Callback;
void Update()
{
x += 1;
if (Test_Callback)
{
Test_Callback(.......); <--- What parameter to use? If i use *this, i get the error i mentioned
}
}
};
void onUpdateEvent(Test& t)
{
printf("update %d\r\n", t.x);
}
int main()
{
Test test;
test.onEvent(onUpdateEvent(test));
while (1)
{
test.Update();
}
return 0;
}
问题是您使用函数调用的返回值onUpdateEvent(test)
作为参数。这是无效的,因为
onUpdateEvent
将
void
作为其返回类型。
onUpdateEvent(test)
的返回值作为参数。相反,只需传递一个指向
onUpdateEvent
的指针作为参数,如下所示:
class Test
{
public:
int x;
void onEvent(const std::function<void(Test)> &callback)
{
Test_Callback = callback;
};
//---------------------vvvvvvvvvvv------->same type as of onUpdateEvent's parameter
std::function<void(const Test&)> Test_Callback;
void Update()
{
x += 1;
if (Test_Callback)
{
Test_Callback(*this); // <--- What parameter to use? If i use *this, i get the error i mentioned
}
}
};
//-----------------vvvvv---------->added const here since this doesn't change anything
void onUpdateEvent(const Test& t)
{
printf("update %d\r\n", t.x);
}
int main()
{
Test test;
//------------------------v--> pass pointer to function as argument instead of passing return value as arg
test.onEvent(onUpdateEvent);
while (1)
{
test.Update();
}
return 0;
}