[英]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);
};
声明了三个函数指针 : free
, send
, receive
函数指针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.