2012-12-05 69 views
0

取決於記錄相關的功能的一個聯機結構看起來像這樣:C90角色到底層抽象類型

typedef struct 
{ 
    TFkt_vlogf vlogf; 
    TFkt_outf outf; 
    void* logData; 
} TLogger; 

在這種記錄功能有一個抽象logData分配與根據工作不同的指針,該記錄器有。

一個Filelogger會在一個點上訪問一個存儲的文件句柄。

FILE * fileHandle = (FILE *)(logger->logData); 

雖然這編譯夾板不滿這一點,與此消息抱怨:

演員到底層的抽象類型FILE *(FILE *)(logger->logData)

我能做些什麼來滿足夾板?

是否有C90更好的方式來存儲和訪問數據,同時仍保持結構簽名繞過的獨立型的實施?

回答

0

更好的解決方案是使用聯合並在該聯合中包含所有可能的數據。

typedef union 
{ 
    FILE * fileHandle; 
    char something; 
    long int other; 
} TLog_data; 

typedef struct 
{ 
    TFkt_vlogf vlogf; 
    TFkt_outf outf; 
    TLog_data logData; 
} TLogger; 

在執行過程中某些時候,你會用:

((TLogger*) logger)->logData.fileHandle