- ベストアンサー
メソッド制御に関して
C++初心者です。 メソッドのタスク制御??を行いたいのですが、 いまいちよくわかりません。 やりたいことは、下記のソース(検討違いかと思いますが..)のように、 メソッドをリストにして、ループで処理をさせたいというものです。 下記を説明致しますと、TestFunc1()・TestFunc2()というメソッドがあります これらのメソッドをリスト化(programList)して、 メソッド呼び出し元(main)にて、ループをさせてメソッドコールをするというものです。 下記ソースもかなり見当違いであると思われますが、 大変申し訳ございませんが、ご教授よろしくお願いいたします。 ########################################################### # task_Test.cc ########################################################### #include <stdio.h> #include <stdlib.h> #include <unistd.h> // 起動プログラム数 #define PROGRAM_NUM (2) // 呼ばれ元メソッド1 int TestFunc1() { // 戻り値 int ret = 0; printf("TestFunc1 Start!\n"); return ret; } // 呼ばれ元メソッド2 int TestFunc2() { // 戻り値 int ret = 0; printf("TestFunc2 Start!\n"); return ret; } // 起動プログラムリスト (void*) programList[PROGRAM_NUM]={TestFunc1(),TestFunc2()} int main(int argc,char *argv[]) { // ループカウンタ int iCnt; // ループ処理 for (iCnt=0; iCnt<PROGRAM_NUM; iCnt++) { programList[iCnt]; } return 0; } ###########################################################
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> #include <stdlib.h> // 起動プログラム数 #define PROGRAM_NUM (2) // 呼ばれ元メソッド1 int TestFunc1() { int ret = 0; printf("TestFunc1 Start!\n"); return ret; } // 呼ばれ元メソッド2 int TestFunc2() { int ret = 0; printf("TestFunc2 Start!\n"); return ret; } int main(){ typedef int (*procedure)(); procedure list[] = {TestFunc1,TestFunc2}; int iCnt; for (iCnt=0; iCnt<2; iCnt++) { (*list[iCnt])(); } return 0; }
その他の回答 (1)
- crew21
- ベストアンサー率26% (58/222)
俺が初めての回答者かと思っていたら、No.1さんがいた。 No.1さんので正解だと思う。 ※こっちではコンパイルまではしとらんから、細かい文法的なことは何かエラー出るかもわからんが、少なくとも考え方は合ってる。 ただ、質問者さんの言われる「メソッド制御」だけど、それとこれはあまり関係無いんじゃないか? このやり方は正式名はしらないけど俗に「関数マトリクスコール」とか呼ばれるもので、関数へのポインタを配列(場合によっては複数次元配列)に格納して、実際に関数をコールする際の記述がきれいになるんだよね。(効能はそれだけじゃないけど) 気のせいかもしれんが、メソッド制御とスレッド制御を思い違いしてるってことはないっすか?
お礼
ご指摘ありがとうございます。 #かなりおそくなってしまいすいません。 スレッド制御ではないと思っておりましたので、 メソッド制御と記載させてもらいました。 どうもご指摘ありがとうございます。 #関数マトリクスコールですが。。初めて聞きました。