gpt4 book ai didi

c++ - 将类的成员函数传递给 pthread_cleanup_push() 时没有匹配的函数调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:26 26 4
gpt4 key购买 nike

当我尝试将函数 cleanup_thread() 传递给 pthread_cleanup_push() 时:

pthread_cleanup_push(cleanup_thread, arg);

我收到以下编译器错误:

 error: no matching function for call to ‘__pthread_cleanup_class::__pthread_cleanup_class(<unresolved overloaded function type>, void*&)’

我猜是因为 void cleanup_thread(void *arg) 是我类的成员函数,因此将 this 指针作为第一个参数。所以函数 cleanup_thread() 的签名不匹配。我如何告诉 pthread_cleanup_push() 使用我的成员函数 cleanup_thread()

最佳答案

最简单的解决方案可能是使该函数成为一个static 成员函数,并将实例指针作为参数传递。

像这样:

struct data_struct
{
some_class* instance;
pthread_t thread_id;
};

class some_class
{
public:
...

static void cleanup_thread(void* arg)
{
data_struct* ptr = reinterpret_cast<data_struct*>(arg);
ptr->instance->private_cleanup_thread();
delete ptr;
}

private:
void private_cleanup_thread()
{
...
}
};

...

some_class* some_class_ptr = new some_class;

...

data_struct* data_ptr = new data_struct;
data_ptr->instance = some_class_ptr;
data_ptr->thread_id = some_thread_id;

pthread_cleanup_push(&some_class::cleanup_thread, data_ptr);

关于c++ - 将类的成员函数传递给 pthread_cleanup_push() 时没有匹配的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21435382/

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