Цель объединения только с одним членом внутри структуры - PullRequest
9 голосов
/ 03 августа 2020

Я видел такое объединение внутри определения структуры в чистом коде в Linux исходниках ядра struct cma_multicast (это не единственное место. Кажется, что это какое-то обычная практика):

struct cma_multicast {
    struct rdma_id_private *id_priv;
    union {
        struct ib_sa_multicast *ib;
    } multicast;
    struct list_head    list;
    void            *context;
    struct sockaddr_storage addr;
    struct kref     mcref;
};

Но я не могу понять, какова цель объединения только с одним членом внутри структуры? Почему мы не можем просто набрать struct ib_sa_multicast *ib;?

Я прочитал это сообщение , но оно не имеет объяснения использования и имеет только специфику C ++.

UPD: Прикреплен пример из ядра Linux вместо проприетарного кода.

1 Ответ

0 голосов
/ 03 августа 2020

Это означает, что в этом случае многоадресная рассылка может иметь только один полиморфный c диспетчер.

Это объектно-ориентированное программирование, выполненное в C. Союз сохранен только для единообразия наименования.

...