2

假设你有:

struct c_struct {
   int value;
   /* other stuff */
   void (* dump)();
};

你想,在某个时候:

c_struct_obj->dump();

我假设您无法实例化一个 c_struct 对象,使其特定的“转储”函数知道其特定的“值”,就像 C++ 方法知道成员变量的方式一样(我想是通过隐式的“this”)?我想我已经知道答案了(“不”)。如果是这样,还有其他以 OOPy 方式使用 C 结构的方法吗?

4

4 回答 4

6

当然,你只需要this自己通过:

struct c_struct {
    int value;
    /* other stuff */
    void (* dump)(struct c_struct *this);
};

然后调用它:

c_struct_obj->dump(c_struct_obj);
于 2010-10-19T18:44:06.713 回答
0

您可以以这种方式使用结构,但它很痛苦。所有 c++ 成员函数都获得一个传递给它们的 *this 指针,您可以执行相同的操作,但您的转储函数需要将其包含的结构作为参数。

于 2010-10-19T18:45:27.130 回答
0

如果您使用的是 C++ 编译器,则结构和类之间的唯一区别是成员变量的默认可见性(类是私有的,结构是公共的)。this 指针在成员函数中可用。

struct test
{
    int x;

    void inc();
};

void test::inc()
{
    x++;
}

int main(void)
{
    test a;
    a.x = 1;
    a.inc();
    int b = a.x;

    return 0;
}

b == 2 这里。

于 2010-10-19T18:48:40.353 回答
0

您可以这样做,甚至可以进行继承。但是与它的接口完全是一团糟,例如,C++ 的确定性自动清理所涉及的资源安全性,你还远远不够。最终,您可以在 C 中执行 OOP,但与仅使用 C++ 以及 C++ 提供的所有其他功能相比,这不值得麻烦。

于 2010-10-19T18:49:05.737 回答