将使用/类型定义限制为类范围

Limit using/typedef to class scope

本文关键字:范围 定义 类型      更新时间:2023-10-16

我需要以某种方式将函数原型存储在类中,但是当我尝试这样做时,它会自动成为全局函数。

原型是通过一个模板给出的,但我不能直接从那里使用它,因为我在线程成员函数中使用它,该函数必须是静态的(因为否则,我会因为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;