2012-02-10 50 views
0

我正在使用C庫中的一個函數,該函數將一個數字作爲參數。目前這意味着我有兩個版本,一個用於double,另一個用於int應該爲所有整數類型提供函數變體嗎?

我應該爲數字類型提供哪些版本的函數?

在標準庫中看到這一點很常見,但它們不夠一致以至於不能使用指導,例如, atof,atolatoi是一組,並且strtod,strtol,strtoul是不同組,abs,labs是第三組。這是三個不同的集合,不同的命名方案都在同一個頭文件中。

編輯:

這不是一個單一的使用,我不知道需要什麼樣的變異體。

理想情況下,它會支持每一個標準變體,那麼足夠寫三個函數的風格,並讓用戶在需要時提升類型?

+0

除非你有需要,浮點/整數對之一應該足夠嗎? – Anycorn 2012-02-10 16:52:00

回答

3

您是否需要更多功能變體?

我懷疑,鑑於這個問題需要問,你只需要一個double和一個int,你的兩個功能。例如,如果您真的需要支持double complex,請構建專門的函數來處理該問題。

+0

這是一個通用庫,將被打包並保存爲幾個不同項目的二進制文件。目前我不知道所有項目的要求,但我不想在幾年內重寫它,因爲我忘記了我正在使用的各種方法和算法。閱讀我對這些問題的編輯以進行澄清。 – Matt 2012-02-10 17:04:44

+0

+1爲YAGNI ... – 2012-02-10 17:09:42

+0

@R ..,是的,只要您沒有改進功能。或者你可以在第一時間做對,並且永遠不要再看代碼。 – Matt 2012-02-10 17:15:14

1

要回答這個問題,我認爲我們需要更多地瞭解問題所在的功能。作爲一般規則,我會提供至多一個浮點和一個整數版本,除非它確實對性能至關重要,以便從小型工作中獲益。儘管如此,int是一個非常糟糕的選擇。我會使用long,long long,intmax_tuintmax_t,具體取決於您是否要支持C89,關於在項目中使用類型的慣例以及簽名要求。或者,您可以創建自己的類型mylib_intarg,讓您更改使用的底層類型,但爲了理智不要鼓勵您的圖書館的用戶使用這些醜陋類型聲明變量。取而代之的是讓它們成爲函數的參數類型,以便調用者使用任何變量類型都是自然的。

1

實現它的C++函數模板,並添加一個C包裝,這樣,當你需要支持說long longlong double你只需要添加另一個C包裝,你的C++算法中模板保持不變,你不需要記住的細節。

相關問題