用于在头文件中定义联合的语法

时间:2011-06-08 15:45:09

标签: c

我一直在考虑使用c来应用OO实践。基本上我到目前为止得到的大纲是

每个对象都有自己的文件 公共函数和变量在.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 个答案:

答案 0 :(得分:4)

您可以像struct一样处理它,为其命名并使用typedef的指针:

typedef union intconverter *IntConverter;

ChannelOBJIntConverter之类的传统术语是不透明句柄。不透明的句柄并不完全是面向对象的(因为你没有继承,虚函数等),但它们是将接口与实现分离的好方法(即提供封装)。