将类的成员函数分配给 C++ 中的函数指针
Posted
技术标签:
【中文标题】将类的成员函数分配给 C++ 中的函数指针【英文标题】:Assigning a class's member function to a function pointer in C++ 【发布时间】:2020-04-29 04:28:54 【问题描述】:我已将函数分配给变量
p_samplen_->onData = onData;
PVOID onData(PVOID args)
它成功了。
我试图将此变量分配给类中的一个函数,但它不起作用。
p_samplen_->onData = &MyClass::onData;
PVOID MyClass::onData(PVOID args)
错误是
test.cpp:32:48: error: assigning to 'startRoutine' (aka 'void *(*)(void *)') from incompatible type 'void *(MyClass::*)(void *)'
请帮帮我。
【问题讨论】:
可能是 ***.com/questions/2402579/… 的副本。你应该考虑std::function
错误信息告诉你:它们是不兼容的类型。 MyClass::onData
需要 MyClass
和 int
才能被调用
【参考方案1】:
您的语法可能不正确。成员指针是与普通指针不同的类型类别。成员指针必须与其类的对象一起使用:
#include <iostream>
class MyClass
public:
void *f(void *);
void *(MyClass::*x)(void *); // <- declare by saying what class it is a pointer to
;
void *MyClass::f(void *ptr)
return ptr;
int main()
MyClass a;
a.x = &MyClass::f; // use the :: syntax
int b = 100;
std::cout << *(int *)((a.*(a.x)) (&b)) << std::endl;
return 0;
或
您可以在 C++ 中使用 functional 和 bind。
例子:
#include <iostream>
#include <functional>
class MyClass
public:
void *f(void *);
std::function<void *(void *)> function;
;
void *MyClass::f(void *ptr)
return ptr;
int main()
int b = 100;
MyClass a;
a.function = std::bind(&MyClass::f, &a, &b);
std::cout << *(int *)a.function(&b) << std::endl;
return 0;
【讨论】:
查看已编辑的。如果它解决了您的问题,请不要忘记点赞并接受它。以上是关于将类的成员函数分配给 C++ 中的函数指针的主要内容,如果未能解决你的问题,请参考以下文章