2012-03-08 69 views
0

我不確定我是否使用了正確的術語,但我很好奇,如果有更有效的方式做事。我有一個文件加載器處理大量的片段(總共約30個)。我的課上散佈着:C++中的模板函數?也許不是正確的術語

void fragment_03(char* location, int frag_num); 
void fragment_04(char* location, int frag_num); 
void fragment_05(char* location, int frag_num); 
void fragment_06(char* location, int frag_num); 

...等等。有沒有更好的方式來以更通用的方式聲明這些函數,而不是寫出30個不同的函數聲明?

謝謝!

+3

取決於這些功能是做什麼的。他們在做類似的工作,還是彼此完全不同?對我來說一個困惑的地方是,我期望爲該文件的第三個「片段」調用「'fragment_03'」,但是你也通過了'frag_num' ...所以也許不是?如果沒有,或許一個更好的名字會做?無論哪種方式,給我們一些這些功能的例子,我們可以給你一個很好的解決方案:-)。 – 2012-03-08 02:46:14

+0

你可能真的想要回顧一下這個設計,讓你有30個不同的功能,它們的名字和參數基本相同......我建議重命名 – 2012-03-08 02:48:10

+0

@EvanTeran他們做的事情很不一樣。我只是好奇,是否有一種方法可以基於類似fragment_x的方式來聲明所有這些方法 - 如果這沒有意義。我道歉。 – 2012-03-08 02:49:48

回答

1

我不能完全肯定,如果這是你想要做什麼,但:

您必須申報,並分別定義你所有的功能,但你可以存儲你的函數指針數組中。

typedef void (fragment_function) (char* location, int frag_num); 

frag_function fragment_0, fragment_1, fragment_2; //define functions in cpp file 

fragment_function *fragment [] = 
{ 
    fragment_0, 
    fragment_1, 
    fragment_2 
}; 

然後定義他們是這樣的:

void fragment_0(char* location, int frag_num) { /**your definition here*/ } 

,使他們能夠通過索引像這樣被稱爲:

有不同的名稱和相同的簽名
for(int i=0; i<3; i++) 
{ 
    fragment[i](frag_location[i], frag_num[i]); 
} 
+1

您也可以爲函數類型(不僅是函數指針)創建一個typedef,這將使得更容易聲明許多相同的函數。雖然沒有幫助定義。 – 2012-03-08 04:23:32

+0

編輯包括本Voigt的建議 – kappamaki 2012-03-08 05:08:21

0

功能都可以使用函數調用指針。否則,您可以選擇模板化功能和專用模板功能。