如何从对象中调用我的set回调函数
How can I call my set my callback function from an object?
这里有一些代码:
typedef void (*ACallBack)(int i);
class SomeClass
{
private:
ACallBack aCallBack;
public:
void SetCallBack(ACallBack aCallBack);
};
void SomeClass::SetCallBack(ACallBack aCallBack)
{
this->aCallBack = aCallBack;
}
class SomeOtherClass
{
private:
SomeClass someClass;
public:
void InitializeSomeClass();
private:
void callBackMethod(int i);
};
void SomeOtherClass::InitializeSomeClass()
{
this->changeVariable = 10;
this->someClass.SetCallBack(this->callBackMethod); // DOESN'T WORK
this->someClass.UseCallBack();
}
void SomeOtherClass::callBackMethod(int i)
{
}
void globalCallBack(int i)
{
int myInt = i;
}
int main()
{
SomeClass sC;
sC.SetCallBack(globalCallBack); //WORKS!!
}
基本上,如果我试图在SomeOtherClass
中设置回调函数,它不会起作用,但当我在main
中全局设置它时,它会起作用。我在这里错过了什么?
只需使用std::function
和std::bind()
:
typedef std::function<void(int i)> ACallBack;
// old code pretty much the same
int main()
{
using namespace std::placeholders;
SomeClass sC;
sC.SetCallBack(globalCallBack); //WORKS!!
SomeOtherClass oC;
sC.SetCallBack(std::bind(&SomeOtherClass::callBackMethod,oC,_1)); //WORKS AS WELL!!
}
在这种情况下,您实际上不需要传递void *userData
,但如果需要编译旧代码,也可以添加它。
您必须使方法静态:
static void callBackMethod(int i, void* userData);
如果您需要一个指向非静态方法(即实例方法)的指针,它会变得更加复杂。
typedef void ( myclass::*FUNC ) (int i, void* userData);
如果你想使用它,它就变成了一个hastlle:
myclass obj; // instantiate myclass
FUNC f = &myclass::myfunc; // assign address
( obj.*f ) ( 123, NULL ); // and call it
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 为什么我的 std::set 不存储唯一值?
- 为什么我的 std::set find() 不起作用
- 如何从对象中调用我的set回调函数
- 我可能会对std::set工作感到困惑。我的代码无法正常工作
- set<>类,当我插入类时,它不接受我的<运算符
- 如何包含我的类与std::set
- 为什么我的对象没有插入到std::set中