2012-01-23 92 views
2

我有一個頭文件,它定義了要通過C++ DLL邊界傳遞的c樣式結構。這個頭文件和DLL可能會被C++,java和c應用程序使用。我想初始化這些結構,以允許用戶指定參數的一個子集,其餘的將被賦予默認值。初始化c樣式結構

我正在考慮在頭文件中創建一系列初始化函數,這些函數需要參考它們將初始化的結構以及可以設置的所有成員的參數。 「初始化」函數將使用重載(基於傳入的結構引用)以確保調用正確的函數。我還計劃使用默認參數來設置默認值。我想這些功能必須是gobal。

這是一個很好的方法嗎?有更好的選擇嗎?感謝

+3

C不支持方法重載。您必須爲C API使用不同的函數名稱,否則使用相同的參數列表將單個函數後面的所有函數抽象出來。你也可以找到[這個問題](http://stackoverflow.com/questions/479207/function-overloading-in-c)有幫助。 –

+0

你可以在頭文件中添加函數原型,但實際的函數最好放在源文件中。還要記住將函數聲明爲'extern「C」',這樣C++不會破壞它們的名字。除此之外,這不是一個壞方法。 –

+0

@邁克爾,謝謝。 – pingu

回答

6

你可以添加一個返回默認初始化結構的功能:

struct abc 
{ 
    int a; 
    float b; 
    char c; 
}; 

abc GetDefaultAbc() 
{ 
    const abc def = { 1,2.0,3 }; 
    return def; 
};