синтаксис для определения объединения в заголовочном файле - PullRequest
1 голос
/ 08 июня 2011

Я искал применение ОО с помощью c. По сути, план, который я получил об этом, таков:

У каждого объекта был свой файл Открытые функции и переменные определены в файле .h для объекта Закрытые переменные и функции находятся в файле .c.

//HEADER

typedef struct channelobj * ChannelOBJ;

ChannelOBJ newChannelOBJ();

void setVolume(ChannelOBJ,float);
void setMute(ChannelOBJ,int);
void setNumberOfInputs(ChannelOBJ,int);



//SOURCE
struct channelobj {
    //int privateint;
    //char *privateString;

    float volume=1;
    int mute=0;
    int numberOfInputs=0;
    short int *leftoutput;
    short int *rightoutput;

};


ChannelOBJ newChannelOBJ(){
    ChannelOBJ channel=(ChannelOBJ)malloc(sizeof(struct channelobj));
    bzero(channel, sizeof(struct channelobj));
    return channel;
}

Мне пока очень нравится этот подход. В моем примере кода я показал определение структуры с именем channelobj в моем заголовочном файле. Я не уверен в правильном синтаксисе для аналогичного определения объединения в заголовочном файле.

Мой союз в исходном файле будет выглядеть следующим образом.

typedef union {
    struct {
        SInt16 high;
        SInt16 low;
    } parts;
    UInt32 word;
} IntConverter;

Как бы я определить это в заголовочном файле?

1 Ответ

4 голосов
/ 08 июня 2011

Вы обрабатываете его так же, как struct, присваивая ему имя и используя указатель для typedef:

typedef union intconverter *IntConverter;

Традиционный термин для таких вещей, как ChannelOBJ и IntConverter - это непрозрачная ручка . Непрозрачные дескрипторы не являются точно объектно-ориентированными (поскольку у вас не будет наследования, виртуальных функций и т. Д.), Но они являются хорошим способом отделения интерфейса от реализации (т. Е. Обеспечения инкапсуляции).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...