LINUX.ORG.RU

История изменений

Исправление wandrien, (текущая версия) :

Как написать функцию одновременно принимающую struct cat и struct dog, но не принимающую struct plane?

Что-то типа такого:


struct cat {

};

struct dog {

};


enum animal_type {
    type_cat,
    type_dog
};

typedef struct {
    enum animal_type type;
    union {
        struct cat * cat;
        struct dog * dog;
    };
} animal_pointer;

void f(animal_pointer p) {
    switch (p.type) {
        case type_cat:
            /* do something with p.cat */
            break;
        case type_dog:
            /* do something with p.dog */
            break;
        default:
            die("Invalid type tag in foo()!");
    }
}

Исходная версия wandrien, :

Как написать функцию одновременно принимающую struct cat и struct dog, но не принимающую struct plane?

Что-то типа такого:


struct cat {

};

struct dog {

};


enum animal_type {
    type_cat,
    type_dog
};

typedef struct {
    enum animal_type type;
    union {
        struct cat * cat;
        struct dog * dog;
    };
} animal_pointer;

void f(animal_pointer p) {
    switch (p.type) {
        case type_cat:
            /* do something with cat */
            break;
        case type_dog:
            /* do something with dog */
            break;
        default:
            die("Invalid type tag in foo()!");
    }
}