繁体   English   中英

我在c中找到了纯虚函数的代码。 任何人都可以解释一下吗?

[英]i found this code for pure virtual function in c . can anyone please explain it?

struct netdev_ops;


struct netdev 
    {

        struct netdev_ops *ops; /* C-style vtable pointer */
    };

struct netdev_ops {

        void (*free)(struct netdev *netdev);


        int (*send)(struct netdev *netdev,
                    struct packet *packet);


        int (*receive)(struct netdev *netdev,
                       struct packet **packet, char **error);
     };

任何人都可以解释上面的代码?

struct netdev_ops *ops是指向不完整类型的指针,有时也称为opaque类型

这意味着使用struct指针的文件不知道struct得到了什么内容,也无法访问任何struct成员。

您不能分配不完整类型的变量,只能指向这样的变量的指针。 实际的分配必须在另一个知道struct实现的代码模块(类)中完成。

在您的情况下,该结构中的函数指针仅由应该知道它们的模块知道。 只有那个模块(类)可以调用它们。

它与C ++抽象基类非常相似,所有成员都设置为私有。 您无法创建此类变量的实例,只能指向一个变量的实例。

我不知道纯虚函数(除了我在C ++中听说过它们),我确信这种类型的分类在C中不存在。

在以下结构中:

struct netdev_ops {

        void (*free)(struct netdev *netdev);


        int (*send)(struct netdev *netdev,
                    struct packet *packet);


        int (*receive)(struct netdev *netdev,
                       struct packet **packet, char **error);
     };

声明了三个函数指针freesendreceive

函数指针free接受struct netdev * type参数并且不返回任何内容。

函数指针send接受struct netdev *struct packet* type arguments并返回一个int 等等。

为了更清楚地理解它,你需要研究C中的函数指针以及如何使用它们。 这些类型的结构模仿C ++ struct成员函数。

在以下部分中:

struct netdev_ops;


struct netdev 
    {

        struct netdev_ops *ops;
    };

这里声明了struct netdev_ops (但这里没有定义),因此可以在struct netdev声明该类型的变量(或指针)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM