首页 > 解决方案 > 如何将 *this 指针隐式传递给 struct 中的函数指针

问题描述

我写了一个字符串结构如下。

typedef struct string string;
struct string
{
    int length;
    char* content;
    void (*init)(string*, const char*);
    void (*print)(string*);
};
void print(string* a)
{
    printf("%s", a->content);
}
void init(string* a, const char* b)
{
    a->init = init;
    a->print = print;
    a->length = strlen(b);
    a->content = (char*)malloc(sizeof(char) * strlen(b));
    strcpy(a->content, b);

}

int main()
{
    string a;
    init(&a, "Hello world!\n");
    a.print(&a);
}

我试图在这里模仿 ooc 但我想不出更好的方法。例如,有没有一种可能的方法使 print(&a) 像:a.print,而不将指向自身的指针传递给函数,就像其他语言中的隐式 *this 指针一样?

标签: cfunction-pointers

解决方案


有没有一种可能的方法使 print(&a) 像:a.print,而不将指向自身的指针传递给函数,就像隐式 *this 指针在其他语言中所做的那样?

你不能


警告

a->content = (char*)malloc(sizeof(char) * strlen(b));
strcpy(a->content, b);

您需要为空结束字符再分配 1 个,否则strcpy会以未定义的行为从分配的块中写入

a->content = malloc(a->length + 1);

strlen已经保存,a->length所以我使用它,乘以它是没用的,sizeof(char)因为它定义为 1


推荐阅读