我需要以某种方式将函数原型存储在类中,但是当我尝试这样做时,它会自动成为全局函数。
原型是通过一个模板给出的,但我不能直接从那里使用它,因为我在线程成员函数中使用它,该函数必须是静态的(因为否则,我会因为this
指针而破坏回调原型(。
我不能让它走向全局,因为我需要运行该类的多个实例,并且原型会变得混乱。
有没有办法做到这一点?
template<class proto>
class cl
{
private:
using m_proto = proto;
void* addr;
public:
static void thread(void* p)
{
// p receives a pointer to the current class
cl* clp = (cl*)p;
((m_proto)clp->addr)();
}
};
您可以使用
void (*addr)();
这会将addr
声明为void (*)()
类型的成员变量。
您可以使用使其更具可读性。
using my_ptr_type = void (*)();
my_ptr_type addr;