gpt4 book ai didi

c++ - 在C++中将类的成员函数分配给函数指针

转载 作者:行者123 更新时间:2023-12-02 10:03:16 25 4
gpt4 key购买 nike

我已将函数分配给变量

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 *)'

请帮我。

最佳答案

您的语法可能不正确。成员指针是与普通指针不同的类型类别。成员指针将必须与其类的对象一起使用:

#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++中使用 functionalbind

例:
#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++ - 在C++中将类的成员函数分配给函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61494241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com