C-是否可以从GLIB中的类实例访问类方法



我在尝试调用我的狗级"谈话"功能时会收到以下错误:"谈话"不是_dogfile的成员。

实际上,我已经在_dogfileclass结构中声明了狗文件,在class_init中,我指着谈话功能。如何从类实例访问类方法?

我包括相关代码:

dog.h:

struct _DogFileClass
{
    GObjectClass parent_class;
    void (*talk)(DogFile *self)
}
void dog_file_talk(DogFile *self);

dog.c

void dog_file_real_talk(DogFile *self);
void dog_file_class_init(DogFileClass *klass)
{
    klass->talk = dog_file_real_talk;
}
void dog_file_talk(DogFile *self)
{
    g_return_if_false(DOG_IS_FILE);
    DogFileClass *klass = DOG_FILE_GET_CLASS(self);
    return klass->talk(self);
}
dog_file_real_talk(DogFile *self)
{
    printf("WOOF")
}

最后,我想以以下方式使用谈话功能: dog->talk(dog);当狗是指向狗狗类的指针

最后,我想以下面的方式使用谈话功能:dog-> Talk(Dog);当狗是指向狗狗类的指针

这是不可能的,因为talk不是DogFile结构的成员。您的dog_file_talk()中的代码看起来正确,因此不尝试使用dog->talk (dog),而是使用dog_file_talk (dog)

我恐怕这是您最接近的带有gobject的OOP。如果您要在DogFile结构上有talk成员,则该指针将针对DogFile的每个实例进行复制,这将阻止子类可通过子类过度付出,并且是浪费内存。

>

如果您想要更多的"天然" OOP,请直接使用C (或更现代的语言)。

最新更新