2012-03-08 10 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

は、それらの機能が何をしているかによって異なります。彼らは同様の仕事をしているのですか、まったく違うのですか?私にとっての混乱の1つは、ファイルの3番目の "フラグメント"に対して "fragment_03"が呼び出されると期待していますが、 'frag_num'も渡します。そうでない場合は、おそらくより良い名前がありますか?いずれにしても、これらの機能がどのように見えるかの例をいくつか挙げておきましょう。 –

+0

基本的に同じ名前と引数を持つ30種類の機能を持つデザインを見直したいと思うかもしれません...私は名前を変更することをお勧めします –

+0

@EvanTeran彼らは非常に異なることをします。 fragment_xのようなものに基づいてそれらのすべてを宣言する方法があれば、私はちょうど興味がありました - これが意味をなさないならば。謝罪します。 –

答えて

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を作成することができ、多くの同じ関数をより簡単に宣言できます。しかし、定義を助けていない。 –

+0

はBen Voigtの提案を含むように編集されました – kappamaki

0

関数は、関数を使用して呼び出すことができますポインタ。あるいは、テンプレート関数と特殊なテンプレート関数を選択することもできます。

関連する問題