2011-08-22 87 views
0

我有一個命令設備的函數。該設備可用兩次,因此我需要兩個設備的相同功能。出於維護的原因,我不希望爲該功能編寫兩次(每個設備一個),因爲那樣我總是需要應用更改兩次。C++ howto使用相同的函數兩次,使用不同的名稱和變量名稱

這些函數在原理上是相同的,但應該對不同的變量起作用。是否有可能使用「變化」名稱來實例化此函數,類似於模板,但不包含類但名稱? 我嘗試提供一個示例。它應該看起來像這樣。

void function_x (int Var, double Vary, ...) { 
int var3_x = getFunctionFromDatabase(var3_x); 
double var2_x = getFunctionFromDatabase(var2_x); 
// some operations 
} 

該功能由Device Handler類的兩個實例應用。 變量var1_x,var2_x和var3_x作爲var1_1,var1_2,var2_1 ...存儲在數據池中,但是每個設備都有一個「相同」變量。一個控制器通過這些變量和數據池命令這兩個設備。

這是可能以某種方式?

我希望問題得到解決;)。這是我的第一個問題:P。 在此先感謝您的幫助。

+0

可能你需要函數指針。 –

+2

這聽起來像你會更好地使用類來封裝你的(成員)變量var1,var2等,它也有助於避免代碼重用。你有什麼理由反對使用類嗎? –

+2

我仍然不明白爲什麼你不能只調用function_x(var1,var2,var3),然後在其他三個變量上調用它們? – PlasmaHH

回答

2

爲什麼不使用數組?例如。

var1[0], var1[1], etc. 

對您管理的每個設備使用一個數組元素。

你可以用宏做一些技巧,但我認爲如果你使用數組,代碼會更清晰。

即使變量位於不能更改的庫中,也可以在初始化函數中設置指向初始變量的指針數組。例如:

var1[0] = &var1_0; 
var1[1] = &var1_1; 

然後,function_x變成函數並且會接受設備索引的參數。

+0

數組不能提供幫助,因爲這些變量是不同類型的。 此外,變量在中央數據庫中有固定的名稱。 它們具有相同的名稱,但對於這兩個設備 例如不同的實例: var3_x = getvarFromDatabase(hereIsTheNameOfTheVarInDatabase_x) var3_1 = getvarFromDatabase(hereIsTheNameOfTheVarInDatabase_1) var3_2 = getvarFromDatabase(hereIsTheNameOfTheVarInDatabase_2) – user905469

0

你說他們有不同的變量,在這種情況下,它將是一個簡單的重載函數的情況。你的例子意味着你想從數據庫中獲得函數,在這種情況下你需要使用函數指針。另一個選擇是你有1個函數,並且你傳遞一個句柄(或者其他的)到它(以及你的參數)來識別它是哪個設備。

+0

在這兩種情況下,功能接收相同(種的)參數,所以重載並不能解決問題。 你是什麼意思處理? 我不想從數據庫中獲取函數,但我想聲明一個從數據庫中獲取其內容的變量。數據庫中變量的名稱已經固定,如value0_1,value0_2,value1_1,value1_2,每個設備的每個變量,因此數據池中的每個變量都有兩個實例。我必須將這些名稱提供給get函數,這就是爲什麼它們也包含「x」。 – user905469

+0

宏就足夠了嗎?這不會關心類型,並會有1個實現。例如 '#define FUNC(X,Y,Z)X = Y; Z = X/2; ' 在這種情況下,X,Y,Z可以是任何數字類型。 – noelicus

相關問題