C言語で関数配列の配列
関数配列を更に配列の中に入れてアクセスしたかったのですが・・・
下のようなソースで関数配列を作って、それに対してアクセスすることは成功したのですが
その関数配列を更に配列に入れたところで詰まってしまいました
fAllに対して配列番号を指定して配列の中にある関数を実行するにはポインタをどのように渡せば良いのでしょう
//関数の戻り値の構造体
typedef struct {
long Prm1;
long Prm2;
long Prm3;
} TBL_DOFUNC, *PTBL_DOFUNC;
//関数の型定義
typedef TBL_DOFUNC(*FUNCTBL)(PTBL_DOFUNC ,long* );
//関数のプロトタイプ
static TBL_DOFUNC s_none(PTBL_DOFUNC, long* );
static TBL_DOFUNC s_0_0(PTBL_DOFUNC, long* );
static TBL_DOFUNC s_1_1(PTBL_DOFUNC, long* );
static TBL_DOFUNC s_2_2(PTBL_DOFUNC, long* );
//テーブルの1
FUNCTBL f[3][3]={
{ s_0_0,s_none,s_none },
{ s_none,s_1_1,s_none },
{ s_none,s_none,s_2_2 }
};
//テーブルの2
FUNCTBL f2[][3] = {
{ s_0_0,s_none,s_none },
{ s_none,s_1_1,s_none }
};
//テーブルの3
FUNCTBL f3[][2] = {
{ s_0_0,s_2_2},
};
//テーブルを更にテーブルで配列
FUNCTBL fAll[][2] = {
{ f,f2 },
{ f3,f2 }
};
void main() {
TBL_DOFUNC ret;
FUNCTBL* ret2;
long param[10];
TBL_DOFUNC ret3;
ret.Prm1 = 100;
ret.Prm2 = 10;
ret.Prm3 = 22;
param[0] = 10;
param[1] = 99;
param[2] = 100;
ret = f[0][0](&ret, param);
ret2 = fAll[0][0];
ret3 = fAll[0][0][0][0](&ret, param); // ●オブジェクト型へのポインターを渡せというエラー
}
TBL_DOFUNC s_none(PTBL_DOFUNC ptf, long* param)
{
TBL_DOFUNC ret;
ret.Prm1 = 1;
ret.Prm2 = 2;
ret.Prm3 = 3;
return ret;
}
TBL_DOFUNC s_0_0(PTBL_DOFUNC ptf, long* param)
{
TBL_DOFUNC ret;
ret.Prm1 = 0;
ret.Prm2 = 9;
ret.Prm3 = 99;
return ret;
}
TBL_DOFUNC s_1_1(PTBL_DOFUNC ptf, long* param)
{
TBL_DOFUNC ret;
ret.Prm1 = 333;
ret.Prm2 = ptf->Prm2;
ret.Prm3 = 332;
return ret;
}
TBL_DOFUNC s_2_2(PTBL_DOFUNC ptf, long* param)
{
TBL_DOFUNC ret;
ret.Prm1 = 444;
ret.Prm2 = param[0];
ret.Prm3 = 444;
return ret;
}